我有一个swing应用程序的GUI应用程序,在NetBeans中实现。对于用户输入提供的各种功能,使用了一个jar,它使用log4j进行日志记录。一切正常,但我必须将信息从log4j重定向到我的GUI中的文本区域。我发现要从log4j重定向到摆动文本区域,必须扩展AppenderSkeleton。我的问题是,我不能修改gui(例如有一个扩展AppenderSkeleton的JTextArea),所以我必须有一个附加到我的JTextarea的类。现在我的应用程序在 log4j之前初始化。我的问题是我找不到一种方法来设置AppenderSkeleton自定义类的属性,这是对我的gui的jtextarea的引用,所以当log4j初始化appender时,它将传递对应用程序文本区域的引用。 我在log4J配置文件中试过这样的: log4j.appender.myAppender.theTextArea = path.to.myFrameclass.theTextArea 跳转log4j会在我的appender中调用setter,并从我的frame中调用getter来设置文本区域,但它不起作用。 如何使appender通过log4j初始化,将信息重定向到我的应用程序? 或者有没有办法让我的应用程序初始化自定义appender并通知log4j将其用于日志记录? 谢谢!log4j重定向到桌面应用程序
3
A
回答
4
最简单的选择是在GUI初始化后以编程方式添加appender。事情是这样的:
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;
}
}
});
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; } }
相关问题
- 1. oauth2重定向url如何为桌面应用程序工作?
- 2. 面向桌面应用程序的Facebook
- 3. 带桌面应用程序的java桌面应用程序
- 4. 在桌面应用程序中实现Log4J
- 5. 无法在Log4j Spring桌面应用程序中记录java.sql.SQLException
- 6. 重定向到从Web应用程序
- 7. Facebook应用程序被重定向到
- 8. 港口Android应用程序到桌面?
- 9. Feathers UI包到桌面应用程序
- 10. OpenGL桌面应用程序到iPhone
- 11. Web到桌面应用程序
- 12. JSF桌面应用程序
- 13. Facebook桌面应用程序
- 14. 桌面应用程序
- 15. Flash桌面应用程序
- 16. netbeans桌面应用程序
- 17. Python桌面应用程序
- 18. Eclipse桌面应用程序
- 19. 桌面应用程序
- 20. Java桌面应用程序?
- 21. gtkmm桌面应用程序
- 22. Java桌面应用程序
- 23. HTML5桌面应用程序
- 24. Swing应用程序桌面
- 25. java桌面应用程序
- 26. 在桌面应用程序
- 27. .Net桌面应用程序
- 28. C#桌面应用程序?
- 29. 应用程序重定向到另一个应用程序
- 30. 重定向到其他应用程序的应用程序
我没有一类myTextAppender扩展AppenderSkeleton {JTextArea的区域; // gettext和setter的textarea}。当gui初始化时,我执行myTextAppender a = new myTextAppender(); a.setArea(this.getTextArea()); Logger.getRootLogger()addAppender(a)中。但我得到log4j:错误无法找到log4j中的关键log4j.appender.WINDOW的值。我究竟做错了什么? – Cratylus 2010-09-10 21:33:40
@Russ:我删除了log4J配置文件,它工作。有没有办法只附加INFO的日志消息而不是WARNING? – Cratylus 2010-09-10 21:42:41
是的这应该工作:yourTextAreaAppender.setThreshold(Level.INFO); – 2010-09-10 21:47:21