2011-02-15 15 views
20

Tengo una aplicación de consola simple que utiliza la biblioteca PDFBox de apache, que a su vez usa el registro de commons. Estoy recibiendo una gran cantidad de mensajes de correo basura en mi consola de la que me gustaría para suprimir:¿Ajustar el nivel de registro para el registro de Apaches commons?

15 Feb, 2011 3:56:40 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFORMACIÓN: sin apoyo/operación discapacitados: EI

en mi código, he tratado de restablecer los niveles de registro en vano:

Logger.getLogger("org.apache.pdfbox.util.PDFStreamEngine").setLevel(Level.OFF); 
Logger.getLogger("org.apache.pdfbox.util").setLevel(Level.OFF); 
Logger.getLogger("org.apache.pdfbox").setLevel(Level.OFF); 

a pesar de estos ajustes, los mensajes siguen apareciendo en la consola. Recuperar el objeto de registro del registro de Commons tampoco ayuda, ya que no parece tener una forma de establecer el nivel.

¿Hay alguna manera de suprimir estos mensajes programáticamente? ¿O necesito agregar un archivo de configuración?

Respuesta

5

Commons-logging es solo una fachada de registro, lo que significa que no proporciona el código que realmente escribe los datos de registro en, por ejemplo, el disco. Lo que necesita cambiar es la configuración para la implementación del registro real (como logback, log4j, sl4fj, etc.). Si no se encuentra dicha biblioteca, se establece de manera predeterminada en java.util.logging.

Recomendaría poner, por ejemplo, log4j en el classpath y agregar un archivo de configuración log4j.xml en su classpath. La mera presencia de log4j en el classpath es en este caso suficiente para inicializarlo. Log4j también se puede configurar programmatically.

+0

Estoy utilizando Java Logging (es decir, no tengo otra biblioteca de registro presente). Y, sin embargo, parece estar ignorando la especificación de nivel en Java.util.logger. – user364902

+0

Puede con a [properties] (http://www.java-tips.org/java-se-tips/java.util.logging/how-to-configure-a-logger-default-values-with-a -properties.html), aunque generalmente recomiendo [en contra] (http://java.sys-con.com/node/48541) java.util.logging. –

1

Apache commons-logging utiliza alguna otra estructura de registro debajo (java.util.logging o Log4J), tiene que investigar cuál utiliza en su proyecto y establecer los niveles de registro adecuados allí.

+0

Estoy usando el registro Java (es decir, no tengo otra biblioteca de registro presente). Y, sin embargo, parece estar ignorando la especificación de nivel en Java.util.logger. – user364902

2

Esto funciona para mí:

String[] loggers = { "org.apache.pdfbox.util.PDFStreamEngine", 
     "org.apache.pdfbox.pdmodel.font.PDSimpleFont" }; 
for (String logger : loggers) { 
    org.apache.log4j.Logger logpdfengine = org.apache.log4j.Logger 
     .getLogger(logger); 
    logpdfengine.setLevel(org.apache.log4j.Level.OFF); 
} 
1

En caso de no tener tiempo para averiguar qué aplicación de registro se utiliza por debajo por el Apache commons-logging, tratar de desactivar todos los que están en la ruta de clase que. El siguiente código prueba tres implementaciones.

Si alguna de las líneas no se compila, ¡no agregue la dependencia! Solo elimina la linea.

String[] loggers = { "org.apache.pdfbox.util.PDFStreamEngine", 
    "org.apache.pdfbox.pdmodel.font.PDSimpleFont", "httpclient.wire.header" , "httpclient.wire.content" 
for (String ln : names) { 
    // Try java.util.logging as backend 
    java.util.logging.Logger.getLogger(ln).setLevel(java.util.logging.Level.WARNING); 

    // Try Log4J as backend 
    org.apache.log4j.Logger.getLogger(ln).setLevel(org.apache.log4j.Level.WARN); 

    // Try another backend 
    Log4JLoggerFactory.getInstance().getLogger(ln).setLevel(java.util.logging.Level.WARNING); 
} 
Cuestiones relacionadas