繁体   English   中英

使用 Springboot org.apache.commons.logging 禁用 PDFBox 日志记录

[英]Disable PDFBox logging with Springboot org.apache.commons.logging

我无法找到一种方法来阻止我在 psring 启动应用程序中使用的 PDFBox 发出警告。 例如:

2019-10-01 16:53:51.021  WARN 24564 --- [nio-8443-exec-2] o.a.pdfbox.pdmodel.font.PDType0Font      : No Unicode mapping for CID+4 (4) in font Calibri-Bold

2019-10-01 16:53:51.022  WARN 24564 --- [nio-8443-exec-2] o.a.pdfbox.pdmodel.font.PDCIDFontType2   : Failed to find a character mapping for 4 in Calibri-Bold

2019-10-01 16:53:51.022  WARN 24564 --- [nio-8443-exec-2] o.a.pdfbox.pdmodel.font.PDCIDFontType2   : Failed to find a character mapping for 4 in Calibri-Bold

我试过:在应用程序文件中:

static {
  System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
  java.util.logging.Logger.getLogger("org.apache.pdfbox").setLevel(java.util.logging.Level.OFF);

  String[] loggers = {
    "org.apache.pdfbox.util.PDFStreamEngine",
    "org.apache.pdfbox.pdmodel.font.PDSimpleFont",
    "org.apache.pdfbox.pdmodel.font.PDFont",
    "org.apache.pdfbox.pdmodel.font.FontManager",
    "org.apache.pdfbox.pdfparser.PDFObjectStreamParser",
    "o.a.pdfbox.pdmodel.font.PDCIDFontType2",
    "org.apache.pdfbox.pdmodel.font.PDCIDFontType2",
    "o.a.pdfbox.pdmodel.font.PDType0Font",
    "org.apache.pdfbox.pdmodel.font.PDType0Font",
    "org.apache.pdfbox.pdmodel.font.PDType1Font"
  };
  for (String logger: loggers) {
    org.apache.log4j.Logger logpdfengine = org.apache.log4j.Logger
      .getLogger(logger);
    logpdfengine.setLevel(org.apache.log4j.Level.OFF);
  }

}

作为运行 jar 时的参数:

-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
-Dorg.slf4j.simpleLogger.defaultLogLevel=off

在 PDFBox 代码中,使用以下命令设置日志:

(import org.apache.commons.logging.LogFactory;)

private static final Log LOG = LogFactory.getLog(PDCIDFontType0.class);

LOG.warn("Found PFB but expected embedded CFF font " + fd.getFontName());

我花了很长时间尝试了很多事情,并在 SO 中搜索了类似问题的答案,但没有得到任何结果。

这是我最终使用的配置文件。 我没有包含任何与日志记录相关的依赖项或向 pdfbox 依赖项添加任何排除项,只是将此文件添加到包含 application.properties 文件的文件夹中。

文件名是 logback-spring.xml

洪水记录器是从如何更改 java 中的 3rd 方库的日志级别中复制的

<property name="LOGS" value="./logs" />

<appender name="Console"
    class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
        </Pattern>
    </layout>
</appender>

<appender name="RollingFile"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS}/spring-boot-logger.log</file>
    <encoder
        class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
    </encoder>

    <rollingPolicy
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily and when the file reaches 10 MegaBytes -->
        <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
</appender>

<!-- LOG everything at INFO level -->
<root level="info">
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
</root>

<!-- LOG "com.baeldung*" at TRACE level -->
<logger name="org.apache" level="ERROR" additivity="false">
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
</logger>

<logger name="flooding logger" level="ERROR" additivity="false">
  <appender-ref ref="Console"/>

这是我在“旧”log4j log4j.properties文件中使用的内容(您应该迁移到 log4j2):

log4j.logger.org.springframework=WARN
log4j.logger.org.apache.pdfbox.pdmodel.font.PDCIDFontType2=FATAL

在“新” log4j2.xml我有这个(附加程序被命名为STDOUTA1 ):

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://logging.apache.org/log4j/2.x/manual/configuration.html 
     https://logging.apache.org/log4j/2.x/manual/appenders.html
-->
<Configuration>
    <Appenders>
        ....
        ....
    </Appenders>
    <Loggers>
        <Logger name="org.springframework" level="warn" additivity="false">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="A1"/>
        </Logger>
        <Logger name="org.apache.pdfbox.pdmodel.font.PDCIDFontType2" level="fatal" additivity="false">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="A1"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="A1"/>
        </Root>
    </Loggers>
</Configuration>

我认为这也应该适用于log4j2。 我使用这种简单的方法来禁用SpringBoot应用程序中特定库的日志。 您只需将其添加到 log4j2.xml 文件中即可。

<Loggers>  
    <Root>
        ****** here is some AppenderRef *******
    </Root>      
    <Logger name="o.a.pdfbox" level="off"/>
    or 
    <Logger name="org.apache.pdfbox" level="off"/> 

</Loggers>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM