gpt4 book ai didi

java - Logback 故障安全到控制台日志记录

转载 作者:行者123 更新时间:2023-11-30 09:36:23 26 4
gpt4 key购买 nike

我正在迁移一个遗留应用程序以使用 logback,在这个过程中我试图让所有旧功能以相同的方式工作。如果无法写入日志文件(由于空间不足、权限错误等),遗留应用程序所做的一件事是记录到控制台

对于 logback,StatusListener 似乎应该处理这个问题,我可以使用 getOrigin 来获取经过筛选的附加程序,但我无法弄清楚如何获取与原始附加程序关联的记录器。可能吗?

logback.xml:

<statusListener class="com.example.LogStatusListener"/>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>WARNING: %logger is only being logged to CONSOLE!%n%msg%n</pattern>
</encoder>
</appender>

<appender name="FILE-SIMPLE" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator class="com.example.CustomDiscriminator"/>
<sift>
<appender name="FILE-${logfile}" class="ch.qos.logback.core.rolling.FileAppender">
<file>${logfile}.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>

<logger name="debug">
<appender-ref ref="FILE-SIMPLE" />
</logger>

听众:

public class LogStatusListener implements StatusListener {
@Override
public void addStatusEvent(Status status) {
if (status instanceof ErrorStatus) {
System.err.println(status);
if (status.getOrigin() instanceof Appender) {
Appender origin = (Appender) status.getOrigin();
if (!origin.isStarted()) {
// find the logger associated with origin, and add ConsoleAppender
}
}
}
}
}

最佳答案

状态消息可以由任何 生成组件,而不仅仅是附加程序。状态消息没有与之关联的记录器,因此您无法获取状态消息的记录器。顺便说一下,logback 实现了 I/O 错误的优雅恢复。例如,如果磁盘已满,logback 将停止记录,并在磁盘上有可用空间时自动重新开始记录。请注意,在此期间发生的日志记录事件将丢失。

关于java - Logback 故障安全到控制台日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790410/

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