Java 如何将日志模式应用于SLF4J_和_JUL?

Java 如何将日志模式应用于SLF4J_和_JUL?,java,slf4j,logback,Java,Slf4j,Logback,我正在使用logback和JUL-to-SLF4J桥(后者用于捕获使用Java日志记录的第三方库日志语句) 我从第三方获得日志输出,但日志记录模式不是我为Logback指定的模式。JUL和Logback是否应该使用我在Logback.xml中指定的相同模式?或者我需要单独设置七月吗?最后,如果我需要单独设置JUL,有没有一种方法可以在一个地方定义我的日志输出模式,并将其转到JUL和Logback 我的设置如下所示: <configuration> <contextLis

我正在使用logback和JUL-to-SLF4J桥(后者用于捕获使用Java日志记录的第三方库日志语句)

我从第三方获得日志输出,但日志记录模式不是我为Logback指定的模式。JUL和Logback是否应该使用我在Logback.xml中指定的相同模式?或者我需要单独设置七月吗?最后,如果我需要单独设置JUL,有没有一种方法可以在一个地方定义我的日志输出模式,并将其转到JUL和Logback

我的设置如下所示:

<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
向标准输出数据。。。我仍然看到了消息