2010-09-27 15 views
26

Recientemente cambié de log4j a logback y me pregunto si existe una manera fácil de ejecutar logback en modo de depuración, similar a la propiedad de log4j log4j.debug. Necesito ver de dónde está recogiendo mi logback.xml de.Ejecutar Logback en Debug

Los documentos mencionan usar un StatusPrinter para imprimir el estado interno del logback, pero eso requeriría cambios de código.

Respuesta

34

[EDIT]

Esto se ha corregido en Logback 1.0.4. Ahora puede usar -Dlogback.debug=true para habilitar la depuración de la configuración de inicio de sesión.

- Antiguo respuesta -

Desafortunadamente, no hay manera de habilitar la depuración a través de una propiedad del sistema. Debe usar <configuration debug="true"> en el logback.xml. Por favor, envíe una solicitud de función.

+2

Se ha hecho: http://jira.qos.ch/ browse/LBCLASSIC-225 ¡Vote por ello! –

+4

La característica es "fija" y está en logback 1.0.4. –

+0

Para ser absolutamente claro, ahora puede habilitar la depuración de Logback con una propiedad del sistema, p. '-Dlogback.debug = true'. A través de http://gordondickens.com/wordpress/2013/07/18/logback-config-showing-debug-level/. –

3

Así es como lo hago. Establecí una propiedad del sistema llamada 'log.level', luego la referencia en logback.xml.

Edit: El inconveniente es que DEBE tener 'log.level' siempre configurado. La forma en que trato esto es verificar mi método principal y configurarlo en INFO, si no está configurado, asegúrese de hacer esto antes de iniciar las llamadas. Luego puedo anular en la línea de comando y tener un valor predeterminado sensato.

Aquí es cómo se ve en mi logback.xml:

<configuration> 
    <logger name="com.mycompany.project" level="${log.level}" /> 
    <logger name="httpclient" level="WARN" /> 
    <logger name="org.apache" level="WARN" /> 
    <logger name="org.hibernate" level="WARN" /> 
    <logger name="org.hibernate.cfg.AnnotationBinder" level="WARN" /> 
    <logger name="org.hibernate.cfg.annotations" level="WARN" /> 
    <logger name="org.quartz" level="WARN" /> 
    <logger name="org.springframework" level="WARN" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-16thread] %-5level %-35.35logger{30} - %msg%n</pattern> 
     </encoder> 
    </appender> 
    <root level="${log.level:-INFO}"> 
     <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 
+6

puede darle a la propiedad un valor predeterminado en su logback.xml en caso de que no esté definido, así: '' De esta forma no necesita establecer en el método principal si no está configurado. – Chirlo

+0

Gracias, me perdí eso. Ahora que lo menciona, puedo verlo en los documentos http://logback.qos.ch/manual/configuration.html#defaultValuesForVariables –

+0

Gracias por ambos comentarios. En Eclipse no puedo establecer una variable de entorno en la configuración de ejecución para desactivar el registro al ejecutar el sitio mvn, pero tengo un nivel predeterminado de depuración al ejecutar pruebas individuales en Eclipse. Gracias. –

-1

en Eclipse se pueden tener varias configuraciones de ejecución. Abre tu clase principal. Vaya al menú desplegable Depurar en la barra de herramientas de eclipse y seleccione Configuraciones de depuración. Haga clic en el icono de Nueva configuración de inicio en la esquina superior izquierda. Dale a tu configuración de lanzamiento un nombre mejor. Haga clic en la pestaña Argumentos debajo del nombre e ingrese -Dlog.level = depuración o lo que desee. Haga clic en Cerrar o Depurar

Puede hacer esto de nuevo y especificar -Dlog.level = warn por ejemplo.

0

No pude hacerlo funcionar utilizando la respuesta elegida. Sin embargo, los siguientes trabajó:

java -Dlogback.configurationFile=/path/to/config-debug.xml com.domain.Main 

Sólo añadir un archivo (config-debug.xml en este ejemplo) en algún lugar de su servidor y dejarlo allí cuando se necesita depurar. Como el siguiente.

<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <!-- encoders are assigned the type 
      ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
     <encoder> 
      <pattern>%d{dd-MMM-yyyy HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <root level="debug"> 
     <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

Ejecute su aplicación utilizando el parámetro -D antes mencionado.

Cuando todo vuelve a la normalidad, elimine el parámetro -D y reinicie su aplicación.

Fuente: Chapter 3: Logback configuration

0

Es posible ajustar la clase oyente estado a través de la propiedad del sistema:

java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener ... 

Ver: Logback manual