Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I resolve this Log4J import error (relating to Classpath too)?

When I run the following simple log4J example, i get an error:

import org.apache.logging.log4j.core.*;
import java.io.*;
import java.sql.SQLException;
import java.util.*;

public class log4jExample{
  /* Get actual class name to be printed on */
  static Logger log = Logger.getLogger(
                      log4jExample.class.getName());

  public static void main(String[] args)
                throws IOException,SQLException{

     log.debug("Hello this is an debug message");
     log.info("Hello this is an info message");
  }
}

and the error reads:

Error: package org.apache.logging.log4j.core does not exist
Error: cannot find symbol
  symbol:   class Logger
  location: class log4jExample
File: C:\Users\adel\Desktop\various_topics\JavaProjects\log4jExample.java  [line: 10]
Error: cannot find symbol
  symbol:   variable Logger
  location: class log4jExample

So I believe I added log4J to the classpath correctly, as shown below:

enter image description here

And I extracted the jar file log4j-core-2.0-beta4.jar from the apache directory as so:

enter image description here

I'm not sure what's happening - how does the import statement work? i.e the example online tells me to say:

import org.apache.log4j.Logger;

but what if my directory structure is like this:

\apache-log4j-2.0-beta4-bin\org\apache\logging\log4j\core\Logger.java

Would I have to say:

import org.apache.logging.log4j.core.Logger;

instead?

like image 997
Caffeinated Avatar asked Apr 29 '13 03:04

Caffeinated


1 Answers

I think you need both the API and the Core jars in your classpath. Follow these instructions for build and install and these for configuration. On the configuration page, the import line you're asking about is import org.apache.logging.log4j.Logger;, so the Logger class will be pulled from the API jar.

Log4j 2 needs two jars (as opposed to Log4j 1.x which needed one) because of the:

API Separation

The API for Log4j is separate from the implementation making it clear for application developers which classes and methods they can use while ensuring forward compatibility. This allows the Log4j team to improve the implementation safely and in a compatible manner.

like image 180
Voicu Avatar answered Sep 26 '22 23:09

Voicu