Es muy fácil y no es un problema de rendimiento más.
Hay dos formas documentadas en el SLF4J manual. También hay ejemplos precisos en la Javadocs
Si usted no tiene logging.properties (por java.util.logging), agregar esto a su código de arranque:
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
Si tiene logging.properties (y quieren mantenerlo), añadir esto a él:
handlers = org.slf4j.bridge.SLF4JBridgeHandler
En cualquier caso, añadir Jul-a-slf4j.jar a la ruta de clases. Oa través de la dependencia Maven:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.0</version>
</dependency>
Con el fin de evitar la pérdida de rendimiento, añadir este contextListener a logback.xml (en la versión 0.9.25 logback):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<!-- reset all previous level configurations of all j.u.l. loggers -->
<resetJUL>true</resetJUL>
</contextListener>
...
</configuration>
Hay una ventaja importante al morder la bullet y refactor a slf4j. A saber, puede usar {} en sus cadenas para retrasar llamadas aString(). –
¿ToString() realmente es una preocupación con las JVM modernas? Me doy cuenta de que es más eficiente evitar las llamadas aString(), pero tengo entendido que la creación de objetos es barata y que esto caería bajo una optimización prematura. –
sí, realmente es una preocupación si está haciendo ricas declaraciones de registro. perfilando un sistema de producción en 2015 en un jvm moderno, las llamadas innecesarias para crear cadenas para las declaraciones de depuración que no están realmente habilitadas en producción es un punto de acceso de la CPU para el sistema de producción. – simbo1905