[英]How do I make log4j clear a log at startup?
我希望只要應用程序正在運行就會滾動日志,但我希望在重新啟動應用程序時重新啟動日志。
更新:根據erickson的反饋,我的appender看起來像這樣:
<appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="my-server.log"/>
<param name="Append" value="false" />
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} %p - %t - %c - %m%n"/>
</layout>
</appender>
我只是添加了以下行:
<param name="Append" value="false" />
它現在在啟動時截斷基本日志文件,但它會單獨保留已滾動的文件。
如果將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();
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.