当前位置: 首页 > 知识库问答 >
问题:

如何在log4j上滚动时在旧日志文件名中使用文件创建日期

卜弘文
2023-03-14

我希望在翻转后,旧日志文件的文件名中有创建日期。当前日志文件名中的日期不等于文件的创建日期。举个例子:如果一个日志文件是昨天创建的,更新到今天,现在已经翻转,那么昨天的日期应该在旧的日志文件名中可见。

    <Appenders>
        <RollingFile name="RollingFile"
                     fileName="${sys:dir}/${sys:file}.log"
                     immediateFlush="true"
                     filePattern="${sys:dir}/${sys:file}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i"
                     ignoreExceptions="false">
            <PatternLayout pattern="%d{yyyyMMdd-HHmmss.SSS} |%-5p| [%t] [%c] - %-100m %n"/>
            <Policies>
                <OnStartupTriggeringPolicy/>
            </Policies>
        </RollingFile> 
    </Appenders>

启动后的日志切换在代码中如下所示

((RollingFileAppender) appender).getManager().rollover();

这类似于onStartupTriggeringPolicy
文件creationTime问题的以下bug(但未修复),适用于RollingFileAppender,组合时间/大小策略

共有1个答案

陆弘新
2023-03-14

哪个日期用于旋转的文件在很大程度上取决于触发策略:

  • sizebasedtriggeringpolicytimebasedtriggeringpolicy都在发出需要翻转的信号时更新prevfiletime。这发生在执行翻转之前,因此文件以当前翻转的日期结束,而不是上一个翻转的日期,
  • CronTriggeringPolicy实际上从未发出需要翻转的信号(IstriggeringEvent总是返回false),而是使用上一次翻转的日期执行翻转。

就我个人而言,我发现它有点不连贯,需要一个重大的重构,但它是一个复杂的机制,很难正确地做到这一点。您可能应该提交一份bug/wishlist报告。

TL;DR:使用CronTriggeringPolicy

 类似资料:
  • 我好像拿不到滚动日志文件。 我的logback.xml配置有以下内容: 有意思。SIFT中“unknown.log”文件中的条目在分钟的停止处停止。之后,不会向SIFT文件写入任何内容,但我一直在catalina.out中获取条目:

  • 我使用log4j进行日志记录,并且使用.log格式的所有日志文件,其结构简单,如; log4j.rootcategory=info,C,R log4j.appender.c=org.apache.log4j.consoleappender log4j.appender.c.layout=org.apache.log4j.patternlayout log4j.appender.r.layout=o

  • 问题内容: 我们有几个同时运行的作业,它们必须为log4j使用相同的配置信息。他们都使用相同的附加程序将日志转储到一个文件中。有没有一种方法可以让每个作业动态命名其日志文件,以使它们保持独立? 谢谢 汤姆 问题答案: 您可以为每个作业传递Java系统属性吗?如果是这样,您可以像这样进行参数化: 然后在您的log4j.properties中: 您可以使用主机环境(例如)中的值填充Java系统属性,该

  • 我想创建单独的日志文件,一个用于信息,另一个用于调试,我正在使用下面的log4j.property文件,请建议如何修改不同文件中的两级日志记录, 我想请求请发送我更新的属性文件而不是给我搜索或探索的指针,因为我已经花了3-4个小时在Google和StackOverflow上搜索这个解决方案, 提前道谢。

  • 问题内容: 是否有可能在运行时使用MDC命名日志文件。 我有一个单独的Web应用程序,该应用程序同时使用tomcat docbase被不同的名称调用。因此,我需要为每个文件设置单独的日志文件。 问题答案: 这可以在Logback(Log4J的后继者)中完成。 Logback旨在作为流行的log4j项目的后继者,从log4j离开的地方接手。 请参阅文档筛选器 SiftingAppender在引用和配

  • 问题内容: 我正在尝试配置log4j以将消息记录到文件中。现在,确实使用我提供的名称创建了该文件,但是日志未写入该文件。我的代码: 我文件的内容: 运行此命令时,将在控制台中获得以下输出: 该文件确实在我的主目录中创建。但是它是空的。 有什么想法我做错了吗?我正在使用log4j 1.2.17版。 问题答案: 输出似乎是Java标准日志记录框架(JUL)发出的默认格式。 因此,有两种可能性(想到):