gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:14 28 4
gpt4 key购买 nike

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

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

我的设置如下所示:

在我的主类中,我有一个静态 block (在类的顶部),其中包含以下几行:

    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

最佳答案

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

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

因此,Tomsawyer 输出确实被发送到 logback,然后被抑制,因为日志级别配置为 warn。而且由于 Tomsawyer 使用 System.out 输出到 stdout...我仍然看到了该消息。

关于java - 如何将日志模式应用于 SLF4J _和_ JUL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850919/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com