2009-11-12 19 views
52

que he encontrado el siguiente error:¿Cómo se puede cambiar el nivel de registro de un paquete con Log4j?

http://issues.apache.org/jira/browse/AXIS2-4363

Se indica lo siguiente:

Este error sólo se produce cuando el nivel de registro para org.apache.axiom es DEBUG por lo que una solución es establecer el nivel de registro> DEPURAR.

Mi pregunta es ¿cómo hago para hacer eso? He estado buscando en mis directorios un archivo de propiedades o algo así y he estado buscando si había algo que pudiera establecer en el código, pero realmente no tengo idea de lo que estoy haciendo. Estoy ejecutando una aplicación de consola en mi escritorio en este momento mientras trato de hacer que esto funcione.

Actualización 1: Observé que mi directorio Axis2 tiene su propio archivo log4j.properties en su raíz. ¿Esto se ignora con seguridad o es parte de la solución (o parte del problema)?

Actualización 2: El archivo de nivel de raíz log4j.properties no está configurado correctamente. En este momento se ve así:

log4j.rootLogger=DEBUG, R 
log4j.logger.org.apache.axiom=WARN 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 

pero eso es al parecer equivocada ya que este código devuelve "nivel de registro es nulo":

System.out.println("Log level is " + logger.getLevel()); 

Por ahora estoy fijando el nivel de registro de código usando

Logger logger = Logger.getLogger("org.apache.axiom"); 
logger.setLevel(Level.WARN); 
+0

Todavía estoy teniendo problemas con esto - He añadido un archivo log4j.properties a raíz de la aplicación de consola, pero sin añadir log4j.rootLogger = WARN, R o log4j.logger.org.apache.axiom = WARN parecen hacer cualquier cosa, me sale el mismo error que antes. –

Respuesta

52

¿Qué servidor de aplicaciones está utilizando? Cada uno pone su configuración de registro en un lugar diferente, aunque la mayoría usa hoy en día Commons-Logging como un contenedor alrededor de Log4J o java.util.logging.

Usando Tomcat como ejemplo, this document explica sus opciones para configurar el registro utilizando cualquiera de las opciones. En cualquier caso, necesita encontrar o crear un archivo de configuración que defina el nivel de registro para cada paquete y cada lugar en el que el sistema de registro generará información de registro (generalmente consola, archivo o db).

En el caso de log4j este sería el archivo log4j.properties, y si se siguen las instrucciones en el siguiente enlace el archivo comenzará a buscar como:

log4j.rootLogger=DEBUG, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.home}/logs/tomcat.log 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 

más simple sería cambiar la línea :

log4j.rootLogger=DEBUG, R 

Para algo como:

log4j.rootLogger=WARN, R 

Pero si todavía quiere que su o wn salida de nivel de depuración en sus propias clases añadir una línea que dice:

log4j.category.com.mypackage=DEBUG 

Leyendo un poco en Log4J y Commons-Logging le ayudará a entender todo esto.

+0

Ahora estoy tratando de ejecutar algunos códigos como una aplicación de consola. Veré si puedo averiguar a dónde debería ir el archivo log4j.properties. Gracias. –

+1

+1 Buena información, gracias –

+3

categoría está en desuso en log4j con registrador – janwen

7

Hoy me encontré con exactamente el mismo problema, Ryan.

En mi src (o su raíz), mis log4j.properties archivo ahora tiene la siguiente adición

# https://issues.apache.org/jira/browse/AXIS2-4363 
log4j.category.org.apache.axiom=WARN 

Gracias por el cara a cara en cuanto a cómo hacer esto, Benjamin.

3

este trabajo para mi:

log4j.logger.org.hibernate.type=trace 

También puede probar:

log4j.category.org.hibernate.type=trace 
0

establecer la propiedad del sistema log4j.debug = true. Luego puede determinar dónde se está ejecutando su configuración de forma amuck.

2

Acabo de enterarme del problema y no pude entender qué estaba pasando mal incluso después de leer todo lo anterior y todo lo que hay por allí. Lo que hice fue

  1. Establecer el nivel de registrador de la raíz a la WARN
  2. Establecer el nivel de registro de paquete para depurar

Cada implementación registro tiene su propia forma de configurarlo a través de propiedades o por medio de código (lote de ayuda disponible en esto)

Independientemente de todo lo anterior, no obtendría los registros en mi consola o mi archivo de registro. Lo que había pasado por alto era el siguiente ...


enter image description here


Todo lo que estaba haciendo malabarismos con el anterior fue el solo control de la producción de los registros (en la raíz/paquete/clase etc.), a la izquierda de la línea roja en la imagen de arriba. Pero no estaba cambiando la forma en que se muestran/consumen los registros de la misma, a la derecha de la línea roja en la imagen de arriba. Handler (Consumo) generalmente está predeterminado en INFO, por lo tanto, sus valiosas sentencias de depuración no aparecerán. El consumo/visualización se controla estableciendo los niveles de registro para los controladores (ConsoleHandler/FileHandler, etc.). Así que seguí adelante y configuré los niveles de registro de todos mis controladores en el mejor y todo funcionó.

Este punto no se dejó claro de manera precisa en cualquier lugar.

Espero que alguien rascándose la cabeza, pensando en por qué las propiedades no funcionan, le sea útil.

Cuestiones relacionadas