首页 文章

如何将日志模式应用于SLF4J _和_ JUL?

提问于
浏览
1

我正在使用logback和JUL到SLF4J桥(后者用于捕获使用Java Logging的第三方库日志语句) .

我从第三方获取日志输出,但日志模式不是我为Logback指定的 . JUL和Logback应该使用我在logback.xml中指定的相同模式吗?或者我需要单独设置JUL吗?最后,如果我需要单独设置JUL,有没有办法让一个地方来定义我的日志输出模式并将其转到JUL和Logback?

我的设置看起来像这样:

在我的主类中,我有一个静态块(在类的顶部),这些行:

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>

下面是我复制的两行日志输出 . 您会注意到第一行是我指定的格式而第二行不是(因为它来自JUL):

21:06:33.297 [ModelUpdateThread-1             ] INFO  | view Molecules and Complexes took 1 ms for 17116 model elements                  | com.**[blanked out for privacy]**
Sat Nov 21 21:06:33 EST 2015 : com.tomsawyer.licensing.TSILicenseManager - setUseProxy
INFO: setUseProxy: false

1 回答

  • 0

    在Logback中设置的模式应该自动应用于JUL ...或者更确切地说,因为JUL日志记录被移交给Logback以便记录模式将适用 .

    我看到的问题原因是因为第三方库(来自tomsawyer)默认情况下将其日志写入stdout和JUL . 那是...除了 Logger.info 之外,Tomsawyer还使用 System.out 来编写日志消息 . 发生这种情况的线索存在于我的配置(警告)的日志级别和Tomsawyer(信息)的输出日志级别 .

    所以Tomsawyer输出确实被发送到logback然后被抑制,因为日志级别是在警告时配置的 . 由于Tomsawyer也用 System.out 输出到stdout ......我仍然看到了这个消息 .

相关问题