调整Apache Commons Logging的日志级别?

25

我有一个简单的控制台应用程序,使用了apache的PDFBox库,该库又使用了commons logging。我在控制台中收到很多垃圾消息,我想要禁止它们:

Feb 15, 2011 3:56:40 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: 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日志记录中检索日志对象也没有帮助,因为它似乎没有设置级别的方法。是否有一种程序方式来抑制这些消息?或者我需要添加一个配置文件吗?
4个回答

10

Commons-logging是一个日志门面,这意味着它不提供将日志数据写入磁盘等位置的实际代码。您需要更改的是实际日志实现(例如logbacklog4j等)的配置。如果找不到此类库,则默认使用java.util.logging

我建议将例如log4j放在类路径中,并在类路径中添加log4j.xml配置文件。在这种情况下,仅存在于类路径中的log4j就足以初始化它。Log4j还可以进行编程式配置。


我正在使用Java日志记录(即没有其他日志记录库存在)。但是它似乎忽略了Java.util.logger上级别的规定。 - user364902
你可以使用 properties 文件来配置,尽管我通常不建议使用 java.util.logging - Johan Sjöberg
1
slf4j也是一个日志门面,而不是一个日志实现。 - William Armiros

3
这对我有效:
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);
}

3

如果您没有时间弄清楚Apache commons-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);
 }

2

Apache commons-logging使用其他日志框架(java.util.logging或Log4J)作为底层,您需要调查项目中使用的框架并设置适当的日志记录级别。


我正在使用Java日志记录(即没有其他日志记录库)。但是它似乎忽略了Java.util.logger上级别的规定。 - user364902

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接