我有一個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