JavaFXのTextArea
にSLF4Jによって記録されたエラーを表示したいと思います。私はこれまで持っていることであるappender
logback-のtest.xml 中:JavaFXのSLF4JログをTextAreaにリダイレクト
<appender name="err" class="logtest.AppTA">
<filter class="logtest.ErrFilter" />
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
TextArea
ストリーム受信する準備ができて:
public class Output extends OutputStream{
private final TextArea ta;
public Output(TextArea ta) {
this.ta = ta;
}
@Override
public void write(int b) throws IOException {
if (ta!=null) {
ta.appendText(String.valueOf((char) b));
}
}
}
と追加処理するためのクラス:
public class AppTA extends AppenderBase<ILoggingEvent> {
PatternLayoutEncoder encoder;
OutputStream os;
@Override
protected void append(ILoggingEvent event) {
try {
if (isEncoderInitialized) {
this.encoder.doEncode(event);
}
} catch (IOException e) {
}
}
@Override
public void start() {
if (this.encoder == null) {
addError("No encoder set for the appender named [" + name + "].");
return;
}
try {
encoder.init(os);
} catch (IOException ex) {
Logger.getLogger(AppTA.class.getName()).log(Level.SEVERE, null, ex);
}
super.start();
}
public PatternLayoutEncoder getEncoder() {
return encoder;
}
public void setEncoder(PatternLayoutEncoder encoder) {
this.encoder = encoder;
}
}
を今私が抱えている問題は、私のTextArea
がコントローラクラスにあり、私はそれらをリンクする方法を知らないということですエーテル。特にSLF4Jが独自のインスタンスAppTA
を作成したとき、私は本当に私のTextArea
をAppTA
に渡す方法はありません。
これにはどのように対処できますか?
:
はまた、以下の答えを見てみましょう。ありがとう! – alex