我有一个在 NetBeans 中实现的 GUI 应用程序。对于用户输入提供的各种功能,使用了一个 jar,它使用 log4j 进行日志记录。一切都很好,但我必须将信息从 log4j 重定向到我的 GUI 中的文本区域。我发现要从 log4j 重定向到摆动文本区域,必须扩展 AppenderSkeleton。我的问题是我不能修改 gui(例如,有一个扩展 AppenderSkeleton 的 JTextArea)所以我必须有一个附加到我的 JTextarea 的类。现在我的应用程序在之前初始化日志4j。我的问题是我找不到将属性设置为 AppenderSkeleton 自定义类的方法,即对我的 gui 的 jtextarea 的引用,这样当 log4j 初始化 appender 时,它将传递对应用程序文本区域的引用。我在 log4J 配置文件中尝试了类似: log4j.appender.myAppender.theTextArea=path.to.myFrameclass.theTextArea 跳跃 log4j 会调用我的 appender 中的 setter 和我的 frame 中的 getter 来设置文本区域,但确实如此不行。如何使 log4j 初始化 appender,将信息重定向到我的应用程序?或者有没有办法让我的应用程序初始化自定义附加程序并通知 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
写是具有以下代码的新类:
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 回答