如何禁用 PDFBox 警告日志记录

nea*_*eal 3 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
Run Code Online (Sandbox Code Playgroud)

我真的很想从控制台中删除这些信息。我使用 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>
Run Code Online (Sandbox Code Playgroud)

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

有人知道这个案子吗?先感谢您。

gly*_*ing 6

如果日志是由 Logback 发出的,那么您尝试过的方法,例如......

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

... 会工作。

但是,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");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 通过在启动应用程序时传递以下 JVM 参数来禁用 Commons Logging:

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

    java.util.logging.Logger.getLogger("org.apache.pdfbox")
        .setLevel(java.util.logging.Level.OFF);
    
    Run Code Online (Sandbox Code Playgroud)