java Log4j不会在删除时重新创建文件
我在Tomcat中有一个web应用程序,它使用log4j进行日志记录
如果在web应用程序运行时删除日志文件,则不会重新创建这些文件
如何配置log4j以在删除时重新创建文件,而不必重新启动Tomcat
你可以在下面搜索框中键入要查询的问题!
我在Tomcat中有一个web应用程序,它使用log4j进行日志记录
如果在web应用程序运行时删除日志文件,则不会重新创建这些文件
如何配置log4j以在删除时重新创建文件,而不必重新启动Tomcat
# 1 楼答案
我找到了Log4j2的解决方案
简短:
当检测到文件删除时,我们可以手动初始化滚动过程
可以使用
RollingFileManager
初始化滚动:更长的是here
# 2 楼答案
在log4j中。属性,配置RollingFileAppender
配置每日cron作业(在/etc/crond.daily/中的sh脚本),该作业可清理超过$DAYS的日志
# 3 楼答案
您可以自定义
RollingFileAppender
并检查文件是否存在。 此代码在每次日志记录之前检查文件是否存在,如果文件丢失,则创建该文件# 4 楼答案
如果您的tomcat位于linux服务器上,并且您使用的特定用户对日志文件夹没有执行权限,那么您的log4j将不会重新创建日志,因为它可能只有读/写权限
如果是这种情况,请尝试:
chmod 755
在包含的文件夹上编辑:
第二种可能性是,某些操作系统仅在文件不再使用时才完成“删除”操作。如果是这种情况,tomcat仍然可以“看到”日志
编辑2:
在这种情况下,制作一个cron作业,每隔几分钟检查文件是否存在。如果不只是重新创建它。我将在几分钟内提供解决方案
因此,crontab中应该包含的bash有如下内容:
# 5 楼答案
我浏览了
log4j
的源代码。初始化FileAppender/RollingFileAppender时,将创建指向该文件的FileOutputStream
实例。将创建一个新的FileDescriptor
对象来表示此文件连接。这就是原因,其他解决方案,如通过Cron监视文件和通过重写在append方法中创建文件,对我来说不起作用,因为新文件分配了一个新的文件描述符。Log4j Writer仍然指向旧的文件描述符解决方案是检查文件是否存在,如果不存在,则调用FileAppender类中存在的activeOptions方法
最后将其添加到log4j中。属性文件:
注意:我已经对log4j 1.2.17进行了测试