调整apache commons日志记录的日志级别?

我有一个简单的控制台应用程序,它使用apache的PDFBox库,后者又使用commons日志记录。 我在我的控制台中收到了很多垃圾邮件,我想压制它:

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日志记录中检索日志对象也没有帮助,因为它似乎没有办法设置级别。

有没有办法以编程方式抑制这些消息? 或者我是否需要添加配置文件?

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

我建议将eg, log4j放在类路径中,并在类路径中添加log4j.xml配置文件。 在这种情况下,类路径中仅存在log4j足以初始化它。 Log4j也可以通过编程方式配置。

这对我有用:

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

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

如果您没有时间弄清楚Apache commons-logging在下面使用哪个Logging实现,请尝试禁用类路径中的所有实现。 以下代码测试三个实现。

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

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