25

我有一个简单的控制台应用程序,它使用 apache 的 PDFBox 库,而后者又使用公共日志记录。我在控制台中收到很多垃圾消息,我想禁止这些消息:

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 日志中检索日志对象也无济于事,因为它似乎没有设置级别的方法。

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

4

4 回答 4

9

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

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

于 2011-02-15T21:27:28.070 回答
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);
}
于 2015-06-27T18:15:58.497 回答
2

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

于 2011-02-15T21:28:45.110 回答
2

如果您没有时间弄清楚 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);
 }
于 2016-03-27T22:05:28.567 回答