2012-03-30 78 views
4

我在Tomcat中有一個使用log4j進行日誌記錄的Web應用程序。
如果我在Web應用程序運行時刪除日誌文件,則不會重新創建文件?
如何配置log4j重新創建文件刪除而不必重新啓動Tomcat?Log4j在刪除時不會重新創建文件

+0

我編輯了我的答案 – 2012-03-30 06:19:18

+0

對其中一個重複這個問題的評論指出,如果您可以替換文件的_contents_而不刪除它,日誌記錄將繼續正常運行(在Linux上,無論如何)。例如,當您測試某些內容並希望清除日誌中的「噪音」以關注由測試引起的日誌記錄時,這可能很有用。如果文件是'cat/dev/null>/path/to/log/file'(或'echo「cat/dev/null>/path/to/log/file」| sudo -s')不能被用戶寫入)。 – Lambart 2017-05-25 19:52:48

回答

3

如果你的tomcat是在linux服務器上,並且你用一個沒有執行日誌文件夾權限的特定用戶啓動它,你的log4j不會重新創建你的日誌,因爲它可能只有讀/寫權限。

如果是這樣的情況下嘗試:

chmod 755上包含文件夾

編輯:

第二種可能性是,一些操作系統完成了「刪除」操作,只有當該文件是不再使用。如果是這樣的話,那麼你的tomcat仍然可以在那裏「查看」日誌。

EDIT2:

在這種情況下,讓一個cron作業,每幾分鐘檢查,如果該文件是存在的。如果不只是重新創建它。我會在幾分鐘內提供解決方案。

所以這應該是你的crontab在bash會碰到這樣的:

if [ ! -f /tomcat_dir/log4j.log ] 
then 
    `touch /tomcat_dir/log4j.log`; 
fi 
+0

它是在Linux和有日誌的目錄有'x'用戶和運行Tomcat的 – Jim 2012-03-30 06:13:56

+0

我明白你的意思了組,但我怎麼能得到約於第二種情況(+1從我) – Jim 2012-03-30 06:22:35

+0

你可以做的是配置你的log4j每天登錄,並製作一個shell腳本來備份和存檔你的舊日誌。 http://www.tutorialspoint.com/log4j/log4j_logging_files.htm – 2012-03-30 06:24:02

1

在log4j.properties,配置RollingFileAppender進行

#------------------------------------------------------------------------------ 
# 
# Rolling File Appender 
# 
#------------------------------------------------------------------------------ 
log4j.appender.rfile = org.apache.log4j.RollingFileAppender 
log4j.appender.rfile.File = logs/server.log 
log4j.appender.rfile.Append = false 
log4j.appender.rfile.MaxFileSize=10240KB 
log4j.appender.rfile.MaxBackupIndex=10 
log4j.appender.rfile.layout = org.apache.log4j.PatternLayout 
log4j.appender.rfile.layout.ConversionPattern = %d %-5p [%C] (%t) %m (%F:%L)%n 

配置每日cron作業(SH腳本/ etc/crond.daily /)清理日期超過$ DAYS舊

find $LOG_ROOT/log/server.log* -mtime +$DAYS -exec rm {} \; 
+0

我有一個滾動appender.I想重新創建自動刪除日誌 – Jim 2012-03-30 07:10:51

+0

我不知道這是如何解決web容器寫入文件系統的問題。就我而言,即使是觸摸一個文件似乎也無法工作。必須重新啓動容器。該死。 – prayagupd 2016-12-23 23:02:37

相關問題