Java 如何将日志模式应用于SLF4J_和_JUL?
我正在使用logback和JUL-to-SLF4J桥(后者用于捕获使用Java日志记录的第三方库日志语句) 我从第三方获得日志输出,但日志记录模式不是我为Logback指定的模式。JUL和Logback是否应该使用我在Logback.xml中指定的相同模式?或者我需要单独设置七月吗?最后,如果我需要单独设置JUL,有没有一种方法可以在一个地方定义我的日志输出模式,并将其转到JUL和Logback 我的设置如下所示:Java 如何将日志模式应用于SLF4J_和_JUL?,java,slf4j,logback,Java,Slf4j,Logback,我正在使用logback和JUL-to-SLF4J桥(后者用于捕获使用Java日志记录的第三方库日志语句) 我从第三方获得日志输出,但日志记录模式不是我为Logback指定的模式。JUL和Logback是否应该使用我在Logback.xml中指定的相同模式?或者我需要单独设置七月吗?最后,如果我需要单独设置JUL,有没有一种方法可以在一个地方定义我的日志输出模式,并将其转到JUL和Logback 我的设置如下所示: <configuration> <contextLis
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>
%d{HH:mm:ss.SSS} [%-32thread] %-5level | %-80msg | %class.%method\(%file:%line\)%n
</Pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
在我的主类中,我有一个静态块(在类的顶部),其中包含以下行:
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
我的logback.xml如下所示:
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>
%d{HH:mm:ss.SSS} [%-32thread] %-5level | %-80msg | %class.%method\(%file:%line\)%n
</Pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
在Logback中设置的模式应自动应用于JUL。。。或者更确切地说,由于JUL日志记录交给Logback进行日志记录,因此将应用该模式 我看到的问题原来是因为第三方库(来自tomsawyer)在默认情况下同时将其日志写入stdout和JUL。。。Tomsawyer使用
System.out
除了Logger.info
之外,还编写日志消息。发生这种情况的线索存在于我的配置的日志级别(warn)和Tomsawyer的输出日志级别(info)中
因此,Tomsawyer输出确实被发送到logback,然后被抑制,因为日志级别配置为warn。由于Tomsawyer也在用
System.out
向标准输出数据。。。我仍然看到了这条消息。在Logback中设置的模式应该自动应用于JUL。。。或者更确切地说,由于JUL日志记录交给Logback进行日志记录,因此将应用该模式
我看到的问题原来是因为第三方库(来自tomsawyer)在默认情况下同时将其日志写入stdout和JUL。。。Tomsawyer使用System.out
除了Logger.info
之外,还编写日志消息。发生这种情况的线索存在于我的配置的日志级别(warn)和Tomsawyer的输出日志级别(info)中
因此,Tomsawyer输出确实被发送到logback,然后被抑制,因为日志级别配置为warn。由于Tomsawyer也在用System.out
向标准输出数据。。。我仍然看到了消息