【问题标题】:Changing PDFBox Logging Level更改 PDFBox 日志记录级别
【发布时间】:2014-09-01 04:41:03
【问题描述】:

我目前正在尝试降低我在 java 项目中使用的 PDFBox 1.8.6 库的日志记录级别,但未能成功。基于this previous question,我在 /src/ 目录中有以下 log4j.properties 文件。

log4j.rootLogger=ERROR, stdout

log4j.logger.org.apache.pdfbox=ERROR

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %-5p [%c{2}]: %m%n

我不确定我还缺少什么,因为我仍然在控制台中收到类似以下消息的垃圾邮件。

Jul 10, 2014 10:19:23 AM org.apache.pdfbox.pdfparser.PDFParser parseXrefTable
WARNING: Count in xref table is 0 at offset 223265
Jul 10, 2014 10:19:23 AM org.apache.pdfbox.pdfparser.PDFParser parseXrefTable
WARNING: Count in xref table is 0 at offset 223265
Jul 10, 2014 10:19:23 AM org.apache.pdfbox.pdfparser.PDFParser parseXrefTable
WARNING: Count in xref table is 0 at offset 223265

如果有办法以编程方式更改日志级别,我根本不会附加到属性文件,因为我不在其他任何地方使用 log4j。我不知道它是否甚至使用 log4j.properties 文件。我正在使用 Eclipse,我不确定如何确认 log4j.properties 文件是否在预期的类路径中。

【问题讨论】:

    标签: java eclipse logging log4j pdfbox


    【解决方案1】:

    log4j.properties 文件应与 .class 文件位于同一文件夹中。现在它似乎没有被加载。您已在第一行正确设置了日志记录级别:

    log4j.rootLogger=ERROR, stdout
    

    这应该将 log4j 中的根记录器设置为使用ERROR 日志记录级别,这意味着它只会显示严重性为ERROR 或更高级别的日志记录消息。

    另外,如果您只想影响 PDFBox,并且您知道库的包,那么您可以通过在属性文件中添加类似这样的内容来选择性地设置包的日志记录级别:

    log4j.logger.com.thepackage.of.pdfbox=ERROR
    

    【讨论】:

    • 为了澄清“与您的 .class 文件在同一个文件夹中”,如果我的主类是 my.package.Main,我应该将属性文件放在 /src/log4j.properties 还是 /src /my/package/log4j.properties?我现在拥有它,它位于 .jar 文件的顶级目录中。
    • 我不确定您的项目是如何在 Eclipse 中设置的,但它应该位于资源文件夹中。我遵循 Maven 约定,将我的属性文件放在 src/main/resources 中,将我的源代码放在 src/main/java 中。项目建好后,log4j.properties文件被放到输出文件夹/target/classes和我的.jar文件的根目录下。
    • 啊。我没有使用 Maven。我之前尝试将它放入资源文件夹,但 log4j 也无法识别它,即使我将资源文件夹放入类路径之后也是如此。
    • 奇怪,您确定资源文件夹设置正确并且属性文件被复制到输出中的正确位置吗?你也可以试试log4j.rootLogger=OFF, stdout,但是ERROR应该比WARN高。
    • 为简单起见,我将属性文件放回 /src/ 文件夹,这就是在 WinRAR 中打开 jar 时的样子:imgur.com/SFdWRFU 我将日志记录级别设置为关闭,但它没有'不做任何事情,因为它没有正确加载它。
    【解决方案2】:

    在我弄清楚之前我遇到了同样的问题。

    PDFBox 1.8.6 库不直接使用 Log4j。相反,它使用 Apache Commons Logging Framework (http://commons.apache.org/proper/commons-logging/guide.html)。

    commons 日志框架有它自己的属性文件来配置日志,并且只有在类路径上时才使用 log4j 作为备用。

    要解决这个问题,您可以将 apache commons 日志配置为忽略它,或者将 log4j 添加到您的类路径中。我在这里找到了一些说明,但我无法让它们工作 (http://cyntech.wordpress.com/2009/01/09/how-to-use-commons-logging/)

    我最终做的是将 log4j.jar 添加到我的类路径中,然后上面的说明(在你的类路径中添加一个 log4j.properties 文件,内容为 log4j.rootLogger=ERROR,stdout)终于奏效了。

    【讨论】:

    • 万一有人找到了这个答案并以与我相同的方式受到折磨:log4j 不再作为单个 JAR 在 log4j 2 中分发。除了核心和 api JAR,您还需要将 Commons 日志记录连接到 log4j 的 shim JAR。如果您的类路径中没有它,配置文件将继续被忽略。这似乎没有记录在 Commons 日志记录站点的任何地方。合适的金块在这里:logging.apache.org/log4j/2.x/faq.html#which_jars
    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 2016-02-20
    • 1970-01-01
    • 2014-08-21
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多