Log4j不会在删除时重新创build文件

我在Tomcat中有一个使用log4j进行日志logging的Web应用程序。
如果在Web应用程序运行时删除日志文件,则不会重新创build文件?
如何configurationlog4j重新创build删除文件,而不必重新启动Tomcat?

如果你的tomcat是在一个linux服务器上,并且用一个特定的用户来启动它,而这个用户不具有日志文件夹的执行权限,你的log4j将不会重新创建你的日志,因为它可能只有读/写权限。

如果是这种情况,尝试一下:

在包含文件夹上的chmod 755

编辑:

第二种可能是某些操作系统只有在文件不再被使用时才能完成“删除”操作。 如果是这样的话,你的tomcat仍然可以在那里“看见”日志。

EDIT2:

在这种情况下,做一个cron作业,每隔几分钟检查文件是否在那里。 如果不是只是重新创建它。 我会在几分钟内提供一个解决方案。

所以应该在你的crontab中的bash应该是这样的:

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

在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作业(/etc/crond.daily/中的sh脚本),用于清理$ DAYS之前的日志

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