2009-11-04 20 views
41

Al intentar ejecutar las siguientes líneas solo se muestran las dos últimas instrucciones ("Aquí hay algunos ERROR" y "Aquí hay algo FATAL") y las tres primeras declaraciones no se muestran .Acabo de comenzar a aprender este tema, ¿alguien puede decir por qué está sucediendo esto?Cómo habilitar Logger.debug() en Log4j

logger.debug("Here is some DEBUG"); 
    logger.info("Here is some INFO"); 
    logger.warn("Here is some WARN"); 
    logger.error("Here is some ERROR"); 
    logger.fatal("Here is some FATAL"); 

la log4j.property tiene

log4j.rootLogger=debug,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=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n 
+0

Pero tengo log4j.properties ¿eso no es suficiente? – Hariharbalaji

+0

¿Puedes publicar tu archivo log4j.properties? –

+2

no debe nombrarlo 'log4j.property', debe ser' log4j.properties' –

Respuesta

54

Es probable que tenga un archivo log4j.properties en algún lugar del proyecto. En ese archivo puede configurar qué nivel de salida de depuración quiere. Vea este ejemplo:

log4j.rootLogger=info, console 

log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

log4j.logger.com.example=debug 

La primera línea define el nivel de registro para el registrador de la raíz a la "información", es decir, sólo información, warn, error fatal y se imprimirán en la consola (que es el appender define un poco debajo de eso).

La última línea establece el registrador para com.example. * (Si obtiene sus registradores a través de LogFactory.getLogger(getClass())) estará en el nivel de depuración, es decir, la depuración también se imprimirá.

+3

También podría ser un archivo log4j.xml, que es un archivo XML que se utiliza en lugar de un archivo de propiedades de Java. –

+0

Hola, log.isDebugEnabled() está imprimiendo verdadero en una de mis clases, pero log.debug() no imprime nada en la consola. ¿Cómo depurar esto ...? help .. – pavan

8

coloque un archivo llamado log4j.xml en la ruta de clases. Los contenidos son, p.

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="debug"/> 
     <appender-ref ref="stdout"/> 
    </root> 

</log4j:configuration> 
+2

Él ya tiene un archivo de propiedades. Creo que en la última versión de log4j, se recomienda que use XML en su lugar, pero no es obligatorio que lo haga; se puede usar un archivo de propiedades. –

+0

Entonces, ¿qué debo hacer para rectificar el problema? – Hariharbalaji

2

Debe configurar el nivel de registrador al nivel más bajo que desea visualizar. Por ejemplo, si desea visualizar mensajes DEBUG, debe configurar el nivel de registro en DEPURAR.

El Apache log4j manual tiene una sección en Configuración.

+0

No sabía cuál era el problema en el último programa, pero copié el mismo código y lo ejecuté en una ruta diferente y ahora está trabajando – Hariharbalaji

2

Esto sucede porque el nivel de registro de su registrador está configurado en 'error', por lo tanto, solo verá los mensajes de error o por encima de este nivel en términos de gravedad, por lo que también verá el 'fatal' mensaje

Si configura el nivel de registro para 'depurar' en su registrador en su log4j.xml, debería ver todos los mensajes.

Eche un vistazo a la introducción log4j para la explicación.

6

Esto probablemente está sucediendo porque su configuración de log4j está configurada en ERROR. Busque un archivo log4j.properties con contenidos como las siguientes:

log4j.rootLogger=ERROR, CONSOLE 

# console logging 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.Threshold=DEBUG 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n 

El rootLogger se establece en el nivel ERROR aquí usando un appender CONSOLE.

Tenga en cuenta que algunos apéndices como el apilador de la consola también tienen una propiedad Threshold que se puede utilizar para anular el nivel rootLoggers. Debe verificar ambos en este caso.

3

Me gusta utilizar un apilador de archivos rodantes para escribir la información de registro en un archivo. Mi archivo de propiedades log4j generalmente se ve así. Prefiero esta manera, ya que me gusta hacer un registro específico del paquete en caso de que necesite diversos grados de registro para diferentes paquetes. Solo se menciona un paquete en el ejemplo.

log4j.appender.RCS=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.RCS.File.DateFormat='.'yyyy-ww 
#define output location 
log4j.appender.RCS.File=C:temp/logs/MyService.log 
#define the file layout 
log4j.appender.RCS.layout=org.apache.log4j.PatternLayout 
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n 
log4j.rootLogger=warn 
#Define package specific logging 
log4j.logger.MyService=debug, RCS 
46

Aquí un corte de una línea rápida que en ocasiones utilizo para desactivar temporalmente el registro de depuración en una prueba unitaria:

Logger.getRootLogger().setLevel(Level.DEBUG); 
+6

Ingreso rápido sin necesidad de importar: 'org.apache.log4j.Logger. getRootLogger(). setLevel (org.apache.log4j.Level.DEBUG); ' –

+1

Sí ... pero es muy probable que ya esté haciendo cosas con el' Logger' en la clase en la que está habilitando el registro. La importación probablemente ya esté allí. –

+0

Claro, con 'Logger'; pero usualmente no 'Nivel '. –

3

Si viene aquí porque está utilizando Commons Apache adquisición con log4j y log4j no funciona como espera, entonces verifique que realmente tenga un log4j.jar en su classpath en tiempo de ejecución. Ese me hizo desconcertar por un momento. Ahora he configurado el corredor en mi entorno dev para incluir -Dlog4j.debug en la línea de comandos de Java, así que siempre puedo ver que Log4j se está inicializando correctamente

+0

o asegúrese de que no está utilizando slf4j-simple jar y reemplace con slf4j-log4j12 – Jason