我在 Swing 中有一个 GUI 应用程序,它是在 NetBeans 中实现的。对于用户输入提供的各种功能,使用了一个 jar,它使用 log4j 进行日志记录。一切正常,但我必须将信息从 log4j 重定向到我的 GUI 中的文本区域。我发现要从 log4j 重定向到 swing 文本区域,必须扩展 AppenderSkeleton。我的问题是我不能修改 gui(例如,为了有一个扩展 AppenderSkeleton 的 JTextArea)所以我必须有这样一个附加到我的 JTextarea 的类。现在我的应用程序在 log4j 之前初始化。我的问题是我找不到一种方法来设置 AppenderSkeleton 自定义类的属性,即对我的 gui 的 jtextarea 的引用,这样当 log4j 初始化 appender 时,它将传递对应用程序文本区域的引用。 我在 log4J 配置文件中试过类似的东西: log4j.appender.myAppender.theTextArea=path.to.myFrameclass.theTextArea 希望 log4j 会调用我的 appender 中的 setter 和我的框架中的 getter 来设置文本区域,但它不起作用。 如何使 appender 由 log4j 初始化,将信息重定向到我的应用程序? 或者我的应用程序有没有办法初始化自定义附加程序并通知 log4j 使用它进行日志记录? 谢谢!
最佳答案
最简单的选择是在您的 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;
}
}
});
关于java - log4j 重定向到 swing 中的桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687384/