2011-02-11 8 views
35

Estoy usando apache.commons.logging, por ahora quería usar la implementación de SimpleLog, pero cuando cambié el nivel, salen los registradores de las bibliotecas. Quiero que lo apague. ¿Existe alguna manera fácil de cambiar el nivel de registro para todo el paquete (¿Puede log4j hacer eso)?
He tratado de establecer¿Cómo deshabilitar los registradores de una clase o de un paquete completo?

org.apache.commons.logging.simplelog.log.foo = fatal

en archivos de propiedades simplelog desactivar (ajuste a fatal es OK) registrador foo, pero no funciona. (foo es un nombre del registrador que aparece en el resultado: [INFO] foo - Mensaje).

+1

Si tienes el tiempo te recomiendo mirar SLF4J. http://www.slf4j.org/manual.html - actúa como una metacapa por encima de un marco de registro real, incluido log4j. Es muy fácil de configurar. Sí, es posible con log4j establecer niveles de registro a nivel de paquete. También es compatible con un nivel 'apagado'. –

+1

Gracias, me gustaría haber podido aprobar esta respuesta, pero este es un comentario. – Damian

Respuesta

74

En Log4j puede especificar un nivel de registro para el paquete, la clase o el registrador especificados identificados por una cadena. Usted simplemente escribir esto en log4j.properties archivo:

log4j.logger.<your package> = DEBUG|INFO|OFF|WARN... 
+0

¿Cómo puedo obtener un control para este registrador en mi clase? –

11

que puedes usar:

log4j.logger.foo = OFF 

Tenga en cuenta que "foo" no tiene por qué ser un paquete o una clase, pero es una Cadena arbitraria. Nosotros, por ejemplo, tener un registrador llamado "SQL" que se llama desde muchas clases.

+0

Me gustaría hacerlo en simplelog. Pero veo que cambiarlo a log4j es una solución. – Damian

+1

log4j es el marco de registro más utilizado en el mundo. Solo adhiérase a lo que todos usan, y se beneficia de complementos, anexos personalizados, filtros, etc. – Daniel

+2

El término clave es 'OFF 'que falta en la respuesta más votados. – kevinarpe

1

El uso de SimpleLog de Commons Logging requiere dos archivos de configuración a menos que esté utilizando algunas propiedades del sistema. Los archivos son: commons --logging.properties y simplelog.properties. Las propiedades de nivel de registro que usted ha indicado deben ser colocados en simplelog.properties como:

org.apache.commons.logging.simplelog.log.foo=warn 

donde "foo" es el nombre del registrador. En general, este es el paquete o paquete y el nombre de clase. En el siguiente ejemplo, todo bajo el paquete com.stackoverflow.utils se establece en información mientras que com.stackoverflow.servlet.Dispatcher se fija específicamente a advierten:

org.apache.commons.logging.simplelog.log.com.stackoverflow.utils=info 
org.apache.commons.logging.simplelog.log.com.stackoverflow.servlet.Dispatcher=warn 

El archivo commons-logging.properties debe contener:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog 

Documentación here y here.

+0

Lo sé. El problema es cómo hacer algo como "log4j.logger. = DEBUG | INFO | OFF | WARN ..." en SimpleLog. – Damian

+0

Creé un proyecto pequeño y probé el control de registro a nivel de paquete y funciona según lo deseado. He actualizado mi ejemplo para ilustrar el control de nivel de registro jerárquico. Si no funciona de esta manera en su entorno, es probable que no detecte sus propiedades simpleslogs. Cuando cambia otros valores allí, ¿afecta el resultado (por ejemplo, habilitar/deshabilitar fechas con org.apache.commons.logging.simplelog.showdatetime = true/false)? –

Cuestiones relacionadas