如何禁用PDFBox警告日志记录

时间:2017-11-29 13:38:54

标签: java apache logging logback pdfbox

我有一个简单的java控制台应用程序。 pdfbox用于从PDF文件中提取文本。但是在控制台中打印了连续信息:

十一月 29, 2017 9:28:27 下午 org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
警告: No Unicode mapping for 14 (145) in font GGNHDZ+SimSun  
十一月 29, 2017 9:28:27 下午 org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
警告: No Unicode mapping for 28 (249) in font LNKLJH+SimSun
十一月 29, 2017 9:28:27 下午 org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode

我真的想从控制台中删除此信息。我使用logback进行日志记录,logback.xml就像:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<logger name="org.apache.pdfbox" level="ERROR"/>
<timestamp key="timestamp-by-second" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoder 默认配置为PatternLayoutEncoder -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/test-${timestamp-by-second}.log</file>
    <append>true</append>
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
        </pattern>
    </encoder>
</appender>
<root level="ERROR">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
</root>

我找到一些答案说应该改变等级。我已将级别更改为ERROR。但仍然没有奏效。我怀疑信息是否与logback.xml有关。因为当我删除STDOUT时,pdfbox警告信息仍会在控制台中打印。

有人知道这个案子吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果Logback正在发出日志记录,那么您尝试过的方法,例如......

  • 添加<logger name="org.apache.pdfbox" level="ERROR"/>
  • 删除STDOUT appender

......会奏效。

但是,PDFBox不使用Logback,而是使用Apache Commons Logging(http://commons.apache.org/logging/)。有几种方法可以禁用Commons Logging:

  • 通过将以下内容添加到您的Main类的静态初始化程序块中来完全禁用Commons Logging,在PDFBOX创建Log实例之前执行必须

    static {
        System.setProperty("org.apache.commons.logging.Log",
                     "org.apache.commons.logging.impl.NoOpLog");
    }
    
  • 启动应用程序时,通过传递以下JVM参数来禁用Commons Logging:

    -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog` 
    
  • 通过将以下内容添加到Main类的静态初始化块中来禁用Commons Logging for PDFBOX命名空间,必须在PDFBOX创建Log实例之前执行此*(注意:您也可以使用Level.SEVERE,取决于您对PDFBOX日志输出的容忍程度):

    java.util.logging.Logger.getLogger("org.apache.pdfbox")
        .setLevel(java.util.logging.Level.OFF);
    

答案 1 :(得分:0)

另一种选择是将一个名为commons-logging.properties的文件添加到您的类路径中(例如,在src/main/resources上的maven中),其中包含以下内容:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

其他选项也对我有用,但这可以使代码更加清晰。