我们有一个模块化应用程序,其中模块具有自己的log4j日志(即通信日志和错误日志)。这些appender和类别都在核心log4j XML中配置,但并非所有模块都始终安装。 DailyRollingFileAppender创建其文件,不管使用情况如何,并且公开了整套模块,尽管不存在,并且由于其中一些模块是特定客户,我们希望隐藏未使用的日志。 有没有办法使DailyRollingFileAppender首次使用而不是自动启动时创建它的文件?如何让log4j只根据需要创建日志文件?
回答
文件追加程序别无选择,懒洋洋地创建日志文件 - 如果不已经setFile
方法会自动创建该文件存在:ostream = new FileOutputStream(fileName, append);
你将不得不延长的appender和覆盖该文件初始化编写自己的代码来获得你所追求的行为。
我很欣赏这个答案有点晚,但是我最近一直在和Log4j进行太多的争斗,不愿意留下悬念:-) – Andy 2010-11-08 15:38:43
我只需要咬那个子弹然后...... – Mirvnillith 2010-11-15 13:49:01
我有同样的问题,所以我扩展了标准的FileAppender类,并且创建了一个新的LazyFileAppender,这是一个FileAppender,它懒散地初始化日志文件(仅当第一次写入操作发生时才创建它)。
LazyFileAppender和标准log4j库的一些其他附加功能可以在我创建的简单库中找到:log4j-additions。
你可以看一下源开发自己的扩展,或者您可以使用它作为是...
扩展标准FileAppender类是不成功我。所以我发现了另一个解决方案,它使用appender以编程方式创建日志文件(仅在名称文件中使用时间戳)。我写了这两种方法:
public void startLog() {
SimpleDateFormat sdf_long = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
FileAppender fa = new FileAppender();
fa.setName("foo");
fa.setFile(sdf_long.format(new Date()) + ".log");
fa.setLayout(new PatternLayout("%d{HH:mm:ss.SSS} %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
Logger.getRootLogger().addAppender(fa);
}
public void stopLog() {
Logger.getRootLogger().getAppender("foo").close();
Logger.getRootLogger().removeAppender("foo");
}
我的log4j.properties文件只配置控制台appender。当我想开始记录时,我调用startLog()方法。当我想登录其他文件时,我先调用stopLog(),然后再调用startLog()方法。
- 1. 我该如何让Log4j每天创建新的日志文件?
- 2. log4j如何每天自动创建一个新的日志文件而不需要归档旧日志文件
- 3. log4j不能创建日志文件
- 4. log4J为方法创建日志文件
- 5. Log4J动态创建日志文件
- 6. 创建Log4j xml日志文件
- 7. log4j不创建日志文件
- 8. 如何在日志文件log4j中只写入INFO日志?
- 9. Log4j 1.2.17 - 如何根据文件大小执行日志滚动
- 10. log4j,只需要在日志文件中只显示INFO和ERROR消息
- 11. Log4j - 日志文件
- 12. 无法根据log4j中xml的级别创建单独的日志文件
- 13. 如何使用Log4j创建基于进程的日志文件?
- 14. 如何根据日期创建文件?
- 15. log4j按需创建文件
- 16. 需要根据创建日期对文件进行排序
- 17. 需要为jar文件创建单独的日志文件吗?
- 18. 如何根据需要创建目录?
- 19. log4j不需要框架日志struts
- 20. 不需要的依赖日志与log4j
- 21. log4net - 只创建一个日志文件
- 22. 使用Log4j创建每日日志?
- 23. 如何让log4j定期重新打开日志文件(logrotate)
- 24. 需要根据日期列和今天的日期创建一个标志
- 25. log4j的 - 空日志文件 -
- 26. log4j javax.mail.MessagingException日志到文件
- 27. Log4j不写日志文件
- 28. 解析log4j日志文件
- 29. Grails Log4j空日志文件
- 30. 多个log4j日志文件
为什么不在核心XML中排除禁用组件的块? – newtover 2010-04-27 09:41:42
我们正在部署log4j配置oonce,然后可以添加模块。在我们将log4j的详细信息打开以进行本地更改时,我们很难在以后的安装中修改该文件。 是的,我们需要高水平的安装自动化。 – Mirvnillith 2010-04-29 08:26:42