Class SLF4JBridgeHandler

java.lang.Object
java.util.logging.Handler
org.slf4j.bridge.SLF4JBridgeHandler

public class SLF4JBridgeHandler extends Handler

Bridge/route all JUL log records to the SLF4J API.

Essentially, the idea is to install on the root logger an instance of SLF4JBridgeHandler as the sole JUL handler in the system. Subsequently, the SLF4JBridgeHandler instance will redirect all JUL log records are redirected to the SLF4J API based on the following mapping of levels:

 FINEST  -> TRACE
 FINER   -> DEBUG
 FINE    -> DEBUG
 INFO    -> INFO
 WARNING -> WARN
 SEVERE  -> ERROR

Programmatic installation:

 // Optionally remove existing handlers attached to j.u.l root logger
 SLF4JBridgeHandler.removeHandlersForRootLogger();  // (since SLF4J 1.6.5)

 // add SLF4JBridgeHandler to j.u.l's root logger, should be done once during
 // the initialization phase of your application
 SLF4JBridgeHandler.install();

Installation via logging.properties configuration file:

 // register SLF4JBridgeHandler as handler for the j.u.l. root logger
 handlers = org.slf4j.bridge.SLF4JBridgeHandler

Once SLF4JBridgeHandler is installed, logging by j.u.l. loggers will be directed to SLF4J. Example:

 import  java.util.logging.Logger;
 ...
 // usual pattern: get a Logger and then log a message
 Logger julLogger = Logger.getLogger("org.wombat");
 julLogger.fine("hello world"); // this will get redirected to SLF4J

Please note that translating a java.util.logging event into SLF4J incurs the cost of constructing LogRecord instance regardless of whether the SLF4J logger is disabled for the given level. Consequently, j.u.l. to SLF4J translation can seriously increase the cost of disabled logging statements (60 fold or 6000% increase) and measurably impact the performance of enabled log statements (20% overall increase). Please note that as of logback-version 0.9.25, it is possible to completely eliminate the 60-fold translation overhead for disabled log statements with the help of LevelChangePropagator.

If you are concerned about application performance, then use of SLF4JBridgeHandler is appropriate only if any of the following conditions is true:

  1. few j.u.l. logging statements are in play
  2. LevelChangePropagator has been installed

As a Java 9/Jigsaw module

Given that to is a reserved keyword under Java 9 within module productions, the MANIFEST.MF file in jul-to-slf4j.jar declares jul_to_slf4j as its Automatic Module Name. Thus, if your application is Jigsaw modularized, the requires statement in your module-info.java needs to be jul_to_slf4j (note the two underscores).

Since:
1.5.1
Author:
Christian Stein, Joern Huxhorn, Ceki Gülcü, Darryl Smith