SLF4J Binding to Log4J Loger Example

Q

How to use SLF4J API with Log4J Logger?

✍: Guest

A

If you want to use SLF4J API with JDK Logger, you need specify slf4j-api-*.jar, slf4j-log4j*.jar and log4j-*.jar in Java classpath as shown in this tutorial.

1. Write a simple Java program, Hello.java, to use SLF4J API:

// Copyright (c) FYIcenter.com
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Hello {
  private static final Logger log = LoggerFactory.getLogger("fyiLog");
  public static void main(String[] args) {
    System.out.println("Log class: "+log.getClass().getName());
    log.error("Hello - error");
    log.warn("Hello - warn");
    log.info("Hello - info");
    log.debug("Hello - debug");
    log.trace("Hello - trace");
  }
}

2. Write a Log4J configuration file, log4j.properties, and keep it in the Java classpath.

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p:: %m%n

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=Hello.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p:: %m%n

3. Download a Log4J version that matches the SLF4J bridge version.

SLF4J bridge to Log4J 1.2: slf4j-log4j12-1.7.31.jar
Log4J 1.2: slf4j-log4j12-1.7.31.jar

4. Run Hello.java with slf4j-api-1.7.31.jar, slf4j-log4j12-1.7.31.jar, slf4j-log4j12-1.7.31.jar and log4j.properties in the Java class path:

$ java -version 
java version "15" 2020-09-15

$ java -cp .:slf4j-api-1.7.31.jar:slf4j-log4j12-1.7.31.jar:log4j-1.2.17.jar Hello.java

Log class: org.slf4j.impl.Log4jLoggerAdapter

07-04 19:46:58 [main] ERROR:: Hello - error
07-04 19:46:58 [main] WARN :: Hello - warn
07-04 19:46:58 [main] INFO :: Hello - info

5. Review the output:

  • The SLF4J API finds the SLF4J-to-Log4J Logger bridge library in the classpath.
  • The SLF4J API binds the SLF4J-to-Log4J Logger bridge library automatically.
  • The SLF4J-to-Log4J Logger bridge is implemented in org.slf4j.impl.Log4jLoggerAdapter class.
  • The SLF4J-to-Log4J Logger bridge actually calls the Log4J logger to get logginng done.

 

SLF4J - Simple Logging Facade for Java

SLF4J Binding to JDK Loger Example

Using slf4j-*.jar in Java Programs

⇑⇑ SLF4J - Simple Logging Facade for Java

2021-12-23, 359👍, 0💬