gpt4 book ai didi

java - 使用 logback-classic/slf4j 配置默认警告/错误日志

转载 作者:行者123 更新时间:2023-11-29 03:45:24 28 4
gpt4 key购买 nike

我正在尝试配置 logback-classic 来处理以下情况:所有来自 my.class 的调试级别或更高级别的消息都应发送到标准输出附加程序。

并且所有警告级别或更高级别的错误消息都应该发送到 altout appender,无论它们来自何处。但我似乎无法让它工作。

我试过这个配置,但问题是如果我将可加性设置为 true,那么所有记录到 stdout 的消息也会发送到 altout,无论它们的警告级别如何。但是,如果我设置 additivity=false,那么即使它们具有警告/错误级别,也不会将来自 my.server 的消息发送到 altout。

<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>Stdout: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<appender name="ALTOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>Altout: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<logger name='my.class' level='debug' additivity="false">
<appender-ref ref="ALTOUT" />
</logger>

<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>

最佳答案

您的配置似乎是正确的,只是您颠倒了 STDOUT 和 ALTOUT(根据您的初始描述)。设置 additivity="true" 将使用指定级别将消息记录到 STDOUT 和 ALTOUT。

<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>Stdout: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<appender name="ALTOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>Altout: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<logger name="Flop" level="error" additivity="true">
<appender-ref ref="STDOUT" />
</logger>

<root level="warn">
<appender-ref ref="ALTOUT" />
</root>
</configuration>

具有以下 Java 类:

public class Flop {

private Logger log = LoggerFactory.getLogger(Flop.class);


public void plop() {
log.debug("Flop debug");
log.warn("Flop warn");
log.error("Flop error");
}
}

public class Main {

private Logger log = LoggerFactory.getLogger(Main.class);

public void prout() {
log.debug("Main debug");
log.warn("Main warn");
log.error("Main error");
}
public static void main(String[] args) {
new Main().prout();
new Flop().plop();
}
}

结果将是:

Altout: 14:55:26.288 [main] WARN  com.excilys.Main - Main warn
Altout: 14:55:26.292 [main] ERROR com.excilys.Main - Main error
Stdout: 14:55:26.292 [main] ERROR com.excilys.Flop - Flop error
Altout: 14:55:26.292 [main] ERROR com.excilys.Flop - Flop error

即主日志在 STDOUT 上发出警告和以上警告,而 Flop 在 STDOUT/ALTOUT 上记录错误和以上警告。设置 additivity="false" 将导致 Flop 仅在 STDOUT 中登录(但这不是您想要的,正如我从您的问题中了解到的那样)。

关于java - 使用 logback-classic/slf4j 配置默认警告/错误日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161737/

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