Question

I setup a basic Java program. I am following this tutorial and have this exact code:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

I have the jars slf4j-api-1.7.5.jar and slf4j-log4j12-1.7.5 jar on my build path. I do not understand what gives, the getLogger method exists in the LoggerFactory class which I can F3 (source code look-up) to. I Googled about this and appear to be the only dope with this problem. Any ideas?

Here is my .classpath for Eclipse:

<xml version="1.0" encoding="UTF-8"?>
<classpath>
   <classpathentry kind="src" path="src"/>
   <classpathentry kind="con" path="org.eclipse.jdit..../>
   <classpathentry kind="lib" path="/home/Desktop/slf4j-api-1.7.5.jar" sourcepath="/home/Desktop/slf4j-api-1.7.5.jar"/>
   <classpathentry kind="lib" path="slf4j-log4j12-1.7.5.jar"/>
   <classpathentry kind="lib" path="log4j-1.2.17.jar"/>
   <classpathentry kind="output" path="bin"/>
</classpath>
Was it helpful?

Solution

On the tutorial page you link to, there is the following note:

slf4j-log4j12-1.7.6.jar

Binding for log4j version 1.2, a widely used logging framework. You also need to place log4j.jar on your class path.

Did you include log4j.jar?

OTHER TIPS

My problem was solved after the inclusion of

slf4j-api-1.7.7.jar and slf4j-simple-1.7.7.jar

on classpath.

For me, when I added the Maven dependency below, it worked:

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

You can always use the logger statically instead of using loggerfactory and creating an instance every time you need it:

final static Logger logger = Logger.getLogger(HelloWorld.class);

According to this SO answer, there does not seem to be much overhead of using either way:

What's the overhead of creating a SLF4J loggers in static vs. non-static contexts?

I solved it with

import org.apache.log4j.Logger;

instead of

import java.util.logging.Logger;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top