ログバックを使用するようにレガシーアプリを移行しています。その過程で、古い機能をすべて同じように機能させ続けようとしています。従来のアプリが行ったことの1つは、ログファイルに書き込めなかった場合にコンソールにログを記録することでした(スペースの不足、不正なアクセス許可などが原因)
ログバックを使用すると、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
}
}
}
}
}