【问题标题】:Adjust Logging level for apache commons logging?调整 apache commons 日志的日志级别?
【发布时间】:2011-06-27 22:27:44
【问题描述】:

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

2011 年 2 月 15 日下午 3:56:40 org.apache.pdfbox.util.PDFStreamEngine processOperator 信息:不支持/禁用操作: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 日志中检索日志对象也无济于事,因为它似乎无法设置级别。

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

【问题讨论】:

    标签: java java.util.logging apache-commons-logging


    【解决方案1】:

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

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

    【讨论】:

    • 我正在使用 java 日志记录(即我没有其他日志记录库)。然而,它似乎忽略了 Java.util.logger 上的级别规范。
    • 您可以使用properties 文件,尽管我通常建议against java.util.logging。
    • slf4j 也是日志外观,而不是日志实现。
    【解决方案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);
     }
    

    【讨论】:

      【解决方案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);
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我正在使用 java 日志记录(即我没有其他日志记录库)。然而,它似乎忽略了 Java.util.logger 上的级别规范。
        猜你喜欢
        • 2019-09-17
        • 2016-08-19
        • 1970-01-01
        • 2016-12-12
        • 2015-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多