PDFBox日志级别更改

3

我目前正在尝试并且未能成功地降低PDFBox 1.8.6库在我的Java项目中的日志记录级别。基于这个之前的问题,我有以下位于/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。 我不知道它是否完全使用log4j.properties文件。 我正在使用Eclipse,不确定如何确认log4j.properties文件是否按预期设置在类路径上。
2个回答

3

我遇到了相同的问题,直到我找到解决方法。

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

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

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

我最终做的是将log4j.jar添加到我的类路径中,然后上述说明(在类路径中添加一个log4j.properties文件,其中包含内容log4j.rootLogger=ERROR, stdout)终于起作用了。


3
如果有人发现这个答案并且像我一样受到折磨:log4j在log4j 2中不再作为单个JAR分发。除了核心和api JAR之外,您还需要shim JAR将Commons logging连接到log4j。如果没有在类路径中,配置文件将继续被忽略。这似乎没有在Commons logging网站上记录; 正确的信息在这里:https://logging.apache.org/log4j/2.x/faq.html#which_jars - Sam Bayer

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文件的顶层目录中。 - user3670023
我不确定你在Eclipse中的项目设置,但它应该在资源文件夹中。我遵循Maven的惯例,将我的属性文件放在src/main/resources中,将源代码放在src/main/java中。当项目构建完成后,log4j.properties文件会被放置在输出文件夹/target/classes和我的.jar文件的根目录中。 - Christian Wilkie
啊,我没有使用Maven。我之前尝试将它放入资源文件夹中,但是log4j在那里也无法识别它,即使我将资源文件夹添加到类路径中。 - user3670023
奇怪,你确定资源文件夹已经正确设置并且属性文件被复制到了输出的正确位置吗?你也可以尝试使用 log4j.rootLogger=OFF, stdout,但是 ERROR 应该比 WARN 更高级别。 - Christian Wilkie
我为了简单起见将属性文件放回/src/文件夹中,当在WinRAR中打开jar文件时,它看起来是这样的:http://imgur.com/SFdWRFU 我将日志记录级别设置为关闭,但它没有起作用,因为它没有正确加载。 - user3670023
你的项目中是否包含了 log4j 的 jar 文件? - Tilman Hausherr

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