java - example - org.apache.commons.logging.logfactory jar
¿Ajustar el nivel de registro para el registro de apache commons? (4)
Tengo una aplicación de consola simple que utiliza la biblioteca PDFBox de apache, que a su vez utiliza el registro de los comunes. Recibo muchos mensajes basura en mi consola que me gustaría suprimir:
15 de febrero de 2011 3:56:40 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: operación no admitida / deshabilitada: EI
En mi código, he intentado 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 esta configuración, los mensajes siguen apareciendo en la consola. Recuperar el objeto de registro desde el registro de Commons tampoco ayuda, ya que no parece tener una manera de establecer el nivel.
¿Hay una manera de suprimir estos mensajes programáticamente? ¿O necesito agregar un archivo de configuración?
Apache commons-logging usa algún otro marco de registro debajo ( java.util.logging
o Log4J), debe investigar cuál usa en su proyecto y establecer los niveles de registro adecuados allí.
Commons-logging es solo una fachada de registro, lo que significa que no proporciona el código que realmente escribe los datos de registro, por ejemplo, en 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, por defecto es 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 suficiente en este caso para inicializarlo. Log4j también se puede configurar mediante programmatically .
En caso de que no tenga tiempo para averiguar qué implementación de registro se usa debajo del registro de nombres comunes de Apache, intente deshabilitar todo lo que se encuentra en su ruta de clase. El siguiente código prueba tres implementaciones.
Si alguna de las líneas no se compila, ¡no agregue la dependencia! Sólo quita la línea.
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);
}
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);
}