我希望只要应用程序正在运行就会滚动日志,但我希望在重新启动应用程序时重新启动日志.
更新: 根据erickson的反馈,我的appender看起来像这样:
我只是添加了以下行:
它现在在启动时截断基本日志文件,但它会单独保留已滚动的文件.
如果将append
参数设置为false
,则在应用程序重新启动时,基本日志文件将"重新启动".你的意思是你想要删除任何"滚动"的日志文件吗?
我已经写了一些自定义代码来找到我的RollingFileAppender
(在log4j中访问它是不必要的!)然后我将其翻转.我已将我的代码改编为一次使用.我在应用程序启动时使用与此类似的代码来强制我的日志滚动(如果非空)所以我总是从一个新的日志开始,但从不删除任何日志,但最旧的日志.
此代码使用给定的Logger并循环记录器层次结构,直到找到附加了Appender的Logger.如果它永远不会,那么它就会放弃.如果是,它会遍历连接到该Logger的所有Appender,并且对于每个作为RollingFileAppender的Appender,它会强制日志滚动.
在log4j中,这样的东西应该更容易做,但我还没有找到一种更简单的方法.
public void rollLogFile(Logger logger) { while (logger != null && !logger.getAllAppenders().hasMoreElements()) { logger = (Logger)logger.getParent(); } if (logger == null) { return; } for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) { final Appender appender = (Appender)e2.nextElement(); if (appender instanceof RollingFileAppender) { final RollingFileAppender rfa = (RollingFileAppender)appender; final File logFile = new File(rfa.getFile()); if (logFile.length() > 0) { rfa.rollOver(); } } } }