【发布时间】:2012-05-28 21:05:13
【问题描述】:
我正在迁移旧版应用程序以使用 logback,在此过程中,我试图保持所有旧功能以相同的方式工作。如果无法写入日志文件(由于空间不足、权限错误等),旧版应用程序所做的一件事是登录到控制台
使用 logback 似乎 StatusListener 应该处理这个问题,我可以使用 getOrigin 来获取 sifted appender,但我不知道如何获取与 origin appender 关联的记录器。有可能吗?
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
}
}
}
}
}
【问题讨论】: