2011-02-15 219 views
20

我有一个简单的控制台应用程序,它使用apache的PDFBox库,它反过来使用公共日志记录。我得到了很多我的控制台垃圾短信的我想要抑制的:调整apache公共日志记录的日志记录级别?

2011年2月15日下午3点56分40秒org.apache.pdfbox.util.PDFStreamEngine processOperator INFO:不支持/禁用操作:EI

在我的代码,我试图将日志级别重置无济于事:

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); 

尽管这些设置,这些消息仍显示在控制台上的。从Commons日志中检索日志对象也没有帮助,因为它似乎没有办法设置关卡。

有没有办法通过编程来抑制这些消息?或者我需要添加一个配置文件?

回答

5

Commons-logging只是一个日志外观,这意味着它不提供实际将logdata写入例如磁盘的代码。您需要更改的是实际日志记录实施的配置(例如logback,log4j,sl4fj等)。如果找不到这样的库,则默认为java.util.logging

我建议将例如log4j放在类路径中,并在您的类路径中添加一个log4j.xml配置文件。在这种情况下,类路径中仅存在log4j就足以初始化它。 Log4j也可以配置为programmatically

+0

我正在使用java日志记录(即我没有其他日志库存在)。但它似乎忽略了Java.util.logger上的级别规范。 – user364902 2011-02-15 21:32:34

+0

你可以通过[properties](http://www.java-tips.org/java-se-tips/java.util.logging/how-to-configure-a-logger-default-values-with-a -properties.html)文件,尽管我一般建议[反对](http://java.sys-con.com/node/48541)java.util.logging。 – 2011-02-15 21:37:30

1

Apache commons-logging使用下面的一些其他日志框架(java.util.logging或Log4J),您必须调查它在您的项目中使用哪一个,并在那里设置适当的日志记录级别。

2

这个工作对我来说:

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

如果你没有时间去找出哪些记录的实现是由Apache的共享记录下使用,尝试禁用所有的都在你的classpath。以下代码测试了三种实现。

如果任何行不编译,请不要添加依赖关系!只需删除该行。

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); 
}