从ICM中的java.util.logging记录

时间:2017-04-24 08:25:47

标签: intershop

在我的墨盒中,我使用了一个使用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>

DEBUG允许JUL登录DEBUG级别,com.paypal级别,我相信这应该转换为INFO中的SLF4J。怎么了?

1 个答案:

答案 0 :(得分:0)

answer my own question

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

背景:除非我们谈论JUL,否则从其他日志框架到SLF4J的路由通常很容易通过所谓的桥接。查看详细信息here。 ICM在JUL和SLF4J之间实现了自己的桥梁,里面有一个微妙的bug。 ICM的日志记录处理程序附加到根级别,任何具有additivity="false"的appender将无法工作,因为它永远不会到达根级别。

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

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

我已经改变了true的可加性,虽然我对此并不高兴,现在我可以探索第三方日志了。