【问题标题】:Logging stop rolling to new files记录停止滚动到新文件
【发布时间】:2014-03-17 05:29:18
【问题描述】:

当前的 spring 应用程序采用 slf4jlog4jslf4j-log4j12 作为日志记录实用程序。

问题是,

(1) 每次使用外部工具(写字板或ultraedit)打开日志文件时,文件就会停止滚动。这很烦人,因为文件可能会增长到 10 GB。

(2)MaxFileSize设置为10Mb,但每次日志文件滚动到20Mb。

这里是配置

log4j.rootLogger=DEBUG, ROL
log4j.appender.ROL=org.apache.log4j.RollingFileAppender
log4j.appender.ROL.Encoding=Unicode
log4j.appender.ROL.File=D:\\IamdWatchingYou.log
log4j.appender.ROL.MaxFileSize=10000KB
log4j.appender.ROL.MaxBackupIndex=10
log4j.appender.ROL.layout=org.apache.log4j.PatternLayout
log4j.appender.ROL.layout.ConversionPattern=%d -- %p -- %c -- %m%n

这个问题通常发生在所有主要的应用服务器(Tomcat、websphere,有时还有 Jboss)。

问题是,根本原因是什么(兼容性或配置)。如果选择其他日志实现(Logback 或 JDK 日志),它会解决问题吗?我只是希望停止制作庞大的日志文件。

【问题讨论】:

    标签: java spring jakarta-ee logging log4j


    【解决方案1】:

    这是翻转逻辑的正常行为,您可以在 log4j 类RollingFileAppender 中看到它。

    翻转逻辑尝试将当前日志文件重命名为包含时间戳的名称,如果由于例如文件被另一个应用程序打开而无法成功,翻转逻辑将静默失败并且不会执行任何更改(不记录警告或错误)。

    这意味着日志将继续在同一个文件中进行,直到下一次成功执行翻转逻辑。

    【讨论】:

    • 谢谢。我可以接受你的说法,因为发生的事情是正常的吗?那么如何在不搞乱 log4j 滚动过程的情况下查看日志文件呢?如果是windows系统,很多编辑器会对日志文件加锁,混淆Log4J,如何防止这种情况发生?
    • 没错,它的正常行为。在 Windows 中,使用 Notepad++ 就不会出现问题。 IT 会不时要求您重新加载文件,但不会锁定它,请参阅superuser.com/questions/21071/…
    • 有趣。我在 Windows 中使用 notepad++ 并出现此问题。可能是这个问题的原因也与问题中的项目(2)有关:即使 MaxFileSize 设置为 10Mb,如果我不在记事本 ++ 中打开任何日志文件,日志文件仍会翻转到 20Mb。似乎配置被默认设置覆盖,我真的不知道..
    • UltraEdit 在默认情况下启用临时文件的使用时不会锁定文件,并且默认情况下也不会使用始终锁定文件的配置设置。甚至可以在 UltraEdit 中查看/编辑文件时删除文件。 UltraEdit 甚至有一个特殊的轮询功能,可以在日志文件增长时查看它。
    • 日志文件使用什么编码,ANSI 或 Unicode (UTF-16)? 10 MB 的 MaxFileSize 可能意味着 10.485.760 个字符,使用 ASCII/ANSI 编码也是 10.485.760 字节,但使用 UTF-16 编码 20.971.520 字节(如果 BOM 也写入日志文件,则多 2 个字节)。根据配置使用Unicode(UTF-16 LE?)。
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多