私は、NetBeans で実装された GUI アプリケーションを使用しています。ユーザーの入力から提供されるさまざまな機能については、ログに log4j を使用する jar が使用されます。すべて問題ありませんが、情報を log4j から GUI のテキスト領域にリダイレクトする必要があります。log4j から swing テキスト領域にリダイレクトするには、AppenderSkeleton を拡張する必要があることがわかりました。私の問題は、GUI を変更できないことです (たとえば、AppenderSkeleton を拡張する JTextArea を持つように)。そのため、JTextarea に追加するクラスが必要です。今、私のアプリケーションは前に初期化されますlog4j. 私の問題は、AppenderSkeleton カスタム クラスへのプロパティとして、私の gui の jtextarea への参照を設定する方法が見つからないことです。そのため、log4j がアペンダーを初期化するときに、アプリケーションのテキスト領域への参照が渡されます。log4j 構成ファイルで次のようなものを試してみました:うまくいかない。アペンダーを log4j で初期化し、情報をアプリケーションにリダイレクトするにはどうすればよいですか? または、アプリケーションがカスタム アペンダーを初期化し、それをログに使用するように log4j に通知する方法はありますか? ありがとうございました!
8950 次
2 に答える
4
最も簡単なオプションは、GUI が初期化された後にプログラムでアペンダーを追加することです。このようなもの:
Logger.getRootLogger().addAppender(yourTextAreaAppender);
編集: INFO レベルのみをログに記録するには、次のようにします。
yourTextAreaAppender.addFilter(new Filter() {
@Override
public int decide(LoggingEvent event) {
if (event.getLevel().equals(Level.INFO)) {
return ACCEPT;
} else {
return DENY;
}
}
});
于 2010-09-10T21:18:45.837 に答える
1
まあ、これはかなり簡単かもしれません、
log4j.propertyファイルでプロパティを指定します。私の場合は次のようになります。
log4j.rootLogger=S log4j.appender.S=com.ibm.nzna.projects.qit.gui.StatusMessageAppender log4j.appender.S.layout=org.apache.log4j.PatternLayout log4j.appender.S.layout.ConversionPattern=%m
Writeは、次のコードを持つ新しいクラスです。
import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.spi.LoggingEvent; /** * @author Ashish Tyagi * */ public class StatusMessageAppender extends AppenderSkeleton { private StatusBar statusBar = AppDefaultWin.getStatusBar(); protected void append(LoggingEvent event) { if(event.getLevel().equals(Level.INFO)){ //here set the text of your swing component; //in my case it is: statusBar.st_STATUS.setText(event.getMessage().toString()); } } public void close() { } public boolean requiresLayout() { return false; } }
于 2011-09-01T12:40:16.227 に答える