来自 java.util.logging 的 ICM 日志
Logs from java.util.logging in ICM
在我的磁带中,我使用了一个使用 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}] "%thread" %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
,我认为这应该在 SLF4J
中转换为 INFO
。怎么了?
问题的原因是记录器的additivity="false"
属性。
背景: 从其他日志框架到 SLF4J 的路由通常很容易通过所谓的桥接,除非我们谈论 JUL。查看详情 here。 ICM 在 JUL 和 SLF4J 之间实现了自己的桥梁,并且内部存在一个微妙的错误。 ICM 的日志记录处理程序附加到根级别,任何带有 additivity="false"
的附加程序都不会工作,因为它永远不会到达根级别。
BUG 好像出在这里com.intershop.beehive.core.internal.log.JavaLoggingAdapter
:
handler = new JavaLoggingHandler();
handler.setLevel(Level.ALL);
Logger root = LogManager.getLogManager().getLogger("");
root.addHandler(handler);
我已经将可加性更改为 true
虽然我对此不是很满意,但现在我可以探索第三方日志了。
在我的磁带中,我使用了一个使用 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}] "%thread" %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
,我认为这应该在 SLF4J
中转换为 INFO
。怎么了?
问题的原因是记录器的additivity="false"
属性。
背景: 从其他日志框架到 SLF4J 的路由通常很容易通过所谓的桥接,除非我们谈论 JUL。查看详情 here。 ICM 在 JUL 和 SLF4J 之间实现了自己的桥梁,并且内部存在一个微妙的错误。 ICM 的日志记录处理程序附加到根级别,任何带有 additivity="false"
的附加程序都不会工作,因为它永远不会到达根级别。
BUG 好像出在这里com.intershop.beehive.core.internal.log.JavaLoggingAdapter
:
handler = new JavaLoggingHandler();
handler.setLevel(Level.ALL);
Logger root = LogManager.getLogManager().getLogger("");
root.addHandler(handler);
我已经将可加性更改为 true
虽然我对此不是很满意,但现在我可以探索第三方日志了。