如何禁用 PDFBox 警告日志记录
How to disable PDFBox warn logging
我有一个简单的 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>
我找到一些答案说应该改变级别。我已将级别更改为错误。但还是不行。我怀疑该信息是否包含 logback.xml。因为当我删除 STDOUT 时,pdfbox 警告信息仍会在控制台中打印。
有人知道这个案例吗?提前谢谢你。
如果日志记录是由 Logback 发出的,那么您尝试过的方法,例如...
- 添加
<logger name="org.apache.pdfbox" level="ERROR"/>
- 删除
STDOUT
appender
...会起作用。
但是,PDFBox 不使用 Logback,而是使用 Apache Commons Logging (http://commons.apache.org/logging/)。有几种方法可以禁用 Commons Logging:
通过将以下内容添加到您的 Main class' 静态初始化程序块来完全禁用 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 class' 静态初始化程序块来禁用 PDFBOX 命名空间的 Commons Logging,这 *必须** 在 PDFBOX 创建 Log
之前执行实例(注意:您也可以使用 Level.SEVERE
,具体取决于您对 PDFBOX 日志输出的容忍度):
java.util.logging.Logger.getLogger("org.apache.pdfbox")
.setLevel(java.util.logging.Level.OFF);
另一种选择是将名为 commons-logging.properties
的文件添加到您的 class 路径(例如,在 src/main/resources
上的 Maven 中),其内容为:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
其他选项也适用于我,但这使代码更简洁。
我有一个简单的 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>
我找到一些答案说应该改变级别。我已将级别更改为错误。但还是不行。我怀疑该信息是否包含 logback.xml。因为当我删除 STDOUT 时,pdfbox 警告信息仍会在控制台中打印。
有人知道这个案例吗?提前谢谢你。
如果日志记录是由 Logback 发出的,那么您尝试过的方法,例如...
- 添加
<logger name="org.apache.pdfbox" level="ERROR"/>
- 删除
STDOUT
appender
...会起作用。
但是,PDFBox 不使用 Logback,而是使用 Apache Commons Logging (http://commons.apache.org/logging/)。有几种方法可以禁用 Commons Logging:
通过将以下内容添加到您的 Main class' 静态初始化程序块来完全禁用 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 class' 静态初始化程序块来禁用 PDFBOX 命名空间的 Commons Logging,这 *必须** 在 PDFBOX 创建
Log
之前执行实例(注意:您也可以使用Level.SEVERE
,具体取决于您对 PDFBOX 日志输出的容忍度):java.util.logging.Logger.getLogger("org.apache.pdfbox") .setLevel(java.util.logging.Level.OFF);
另一种选择是将名为 commons-logging.properties
的文件添加到您的 class 路径(例如,在 src/main/resources
上的 Maven 中),其内容为:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
其他选项也适用于我,但这使代码更简洁。