【问题标题】:How do I limit log4j files based on size (only)?如何根据大小(仅)限制 log4j 文件?
【发布时间】:2013-10-21 18:52:05
【问题描述】:

我想将 log4j 配置为只写入最大指定大小的文件,例如5MB。当日志文件达到 5MB 时,我希望它开始写入新文件。我想在日志文件名中加入某种有意义的时间戳,以区分一个文件和下一个文件。

在编写新文件时,我不需要它以任何方式重命名或操作旧文件(压缩是一个福音,但不是必须的)。

绝对不希望它在一定时间或滚动文件数量后开始删除旧文件。

N MB 日志文件的时间戳块似乎是我能想象到的绝对基本的最小简单策略。它是如此基本,以至于我几乎拒绝相信它不是开箱即用的,但我一直无法弄清楚如何做到这一点!

特别是,我尝试了DailyRollingFileAppenderRollingFileAppender 或“Extras”RollingFileAppender 的所有化身。当超过备份计数时,所有这些都会删除旧文件。我不想要这个,我想要我所有的日志文件!

Extras 中的TimeBasedRollingPolicy 不适合,因为它没有最大文件大小选项,并且您无法关联辅助SizeBasedTriggeringPolicy(因为它已经实现了TriggeringPolicy)。

是否有开箱即用的解决方案 - 最好是 maven Central 中的解决方案?

【问题讨论】:

  • 您是否考虑过使用 maxint 作为参数调用setMaxBackupIndex,从而有效地让它永远滚动?
  • @flup,这无法扩展。使用常规的RollingFileAppender,如果您有 N 个“备份”文件,则每次滚动都需要重命名所有 N 个文件,这可能会非常慢。出于这个原因,“额外”RollingFileAppender 将备份计数限制为 12。如果我可以在创建时将创建时间(或一些唯一索引 - 并不关心哪个)放入文件名中,我真的不希望或不需要它来重命名任何文件。
  • @flup 实际上比这更糟糕 - 如果你有 maxBackupIndex=N,它会尝试查找并重命名所有 N 个文件(即使它们还不存在)......所以 maxint 会绝对是不可能的!
  • 你需要使用log4j吗? Logback 支持基于时间和大小的滚动文件策略,可能适合您 (logback.qos.ch/manual/appenders.html)。
  • 有趣!我认为最好的解决方案是为现有的 appender 调整代码。

标签: log4j rollingfileappender fileappender


【解决方案1】:

我放弃了让它开箱即用的尝试。事实证明,正如年轻人所说的那样,uk.org.simonsite.log4j.appender.TimeAndSizeRollingAppender 就是炸弹。

我曾尝试联系一段时间以让作者将其粘贴到 maven Central 中,但到目前为止没有运气。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2010-10-22
    • 2012-06-17
    • 2016-06-23
    • 2013-05-11
    • 2015-04-20
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多