Java 更改PDFBox日志记录级别

Java 更改PDFBox日志记录级别,java,eclipse,logging,log4j,pdfbox,Java,Eclipse,Logging,Log4j,Pdfbox,我目前正在尝试降低我在java项目中使用的PDFBox 1.8.6库的日志记录级别,但失败了。基于,我在/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.appen

我目前正在尝试降低我在java项目中使用的PDFBox 1.8.6库的日志记录级别,但失败了。基于,我在/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文件是否按预期位于类路径上。

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

log4j.rootLogger=ERROR, stdout
这应该将log4j中的根记录器设置为使用
错误
日志级别,这意味着它将只显示严重程度
错误
或更高的日志消息

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

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

我也有同样的问题,直到我解决了

PDFBox 1.8.6库不直接使用Log4j。相反,它使用apachecommons日志框架()

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

要解决这个问题,您可以将apache commons日志配置为忽略它,或者将log4j添加到类路径中。我在这里找到了一些说明,但我无法让它们发挥作用()


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

为了澄清“与.class文件在同一文件夹中”,如果我的主类是my.package.main,我应该将属性文件放在/src/log4j.properties还是/src/my/package/log4j.properties中?在我现在拥有它的地方,它位于.jar文件的顶级目录中。我不确定您的项目在Eclipse中是如何设置的,但它应该位于resources文件夹中。我遵循Maven的惯例,将属性文件放在
src/main/resources
中,将源代码放在
src/main/java
中。构建项目时,log4j.properties文件被放入输出文件夹/target/classes和my.jar file.Ah的根目录中。我没有用Maven。我以前试图将其放入resources文件夹,但log4j也没有在那里识别它,即使在我将resource文件夹放入classpath之后也是如此。奇怪的是,您确定资源文件夹设置正确并且属性文件被复制到输出中的正确位置了吗?您也可以尝试
log4j.rootLogger=OFF,stdout
,但是
ERROR
的级别应该高于
WARN
。为了简单起见,我将属性文件放回/src/文件夹,这就是在WinRAR中打开jar时的外观:我将日志级别设置为OFF,但是它没有做任何事情,因为它没有正确地加载它。如果有人找到了这个答案,并且像我一样被折磨:log4j不再作为一个罐子在log4j 2中分发。除了core和api JAR之外,还需要连接Commons日志和log4j的shimjar。如果在类路径中没有该选项,配置文件将继续被忽略。在Commons日志站点的任何地方都没有记录到这一点;正确的金块在这里: