0

在我的墨盒中,我使用了一个外部库,该库使用java.util.logging. 我想将日志重定向到 SLF4J/logback,但不知何故这并不像我期望的那样工作(日志是空的)。以下是相关的 logback 配置:

<appender name="PayPal_LogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>TRACE</level>
    </filter>       
    <File>${intershop.logfile.Directory}/paypal-${intershop.logfile.NamePostfix}.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${intershop.logfile.Directory}/paypal-${intershop.logfile.NamePostfix}.%d{yyyy-MM-dd}.log</FileNamePattern>
    </rollingPolicy>
    <encoder>
        <pattern>
            [%date{yyyy-MM-dd HH:mm:ss.SSS Z}] %-5level ${intershop.HostName} ${intershop.InstallationID} ${intershop.ServerName} [%mdc{requestsite}] [%mdc{requestapplication}] %logger [%marker] [%mdc{request.type}] [%mdc{session.id}] [%mdc{request.uuid}] &quot;%thread&quot; %msg %ex%n
        </pattern>
    </encoder>
</appender> 

<logger name="com.paypal" additivity="false">
    <level value="TRACE" />
    <appender-ref ref="Error" />
    <appender-ref ref="PayPal_LogFile" />
</logger>

JUL 登录DEBUG级别,DEBUG级别是允许的com.paypal,我相信这应该翻译INFOSLF4J. 怎么了?

4

1 回答 1

0

我会回答我自己的问题

问题的原因是additivity="false"记录器的属性。

背景:从其他日志框架到 SLF4J 的路由通常很容易通过所谓的桥接器,除非我们谈论 JUL。请参阅此处的详细信息。ICM 在 JUL 和 SLF4J 之间实现了自己的桥梁,内部存在一个微妙的错误。ICM 的日志处理程序附加到根级别,并且任何附加程序additivity="false"都不会工作,因为它永远不会到达根级别。

错误似乎在这里com.intershop.beehive.core.internal.log.JavaLoggingAdapter

handler = new JavaLoggingHandler();
handler.setLevel(Level.ALL);
Logger root = LogManager.getLogManager().getLogger(""); 
root.addHandler(handler);

我已将可加性更改为true虽然我对此不太满意,但现在我可以探索第三方日志了。

于 2017-04-24T12:19:55.653 回答