Java log4j中的文件名

Java log4j中的文件名,java,log4j,Java,Log4j,在当前情况下,日志文件是基于10MB的最大文件大小进行滚动的。滚动文件的文件名是例如“SystemOut_Debug.log.1” 问题是这些滚动日志文件的文件名。我们想要的是文件滚动时的当前日期和时间戳。例如“SystemOut_Debug.20110505.104500.log” 我们怎样才能认识到这一点 非常感谢DailRollingFileAppender正是您要搜索的内容 <appender name="roll" class="org.apache.log4j.DailyRol

在当前情况下,日志文件是基于10MB的最大文件大小进行滚动的。滚动文件的文件名是例如“SystemOut_Debug.log.1”

问题是这些滚动日志文件的文件名。我们想要的是文件滚动时的当前日期和时间戳。例如“SystemOut_Debug.20110505.104500.log”

我们怎样才能认识到这一点


非常感谢

DailRollingFileAppender正是您要搜索的内容

<appender name="roll" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="application.log" />
    <param name="DatePattern" value=".yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" 
          value="%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n  %-5p %m%n"/>
    </layout>
  </appender>

改用DailRollingFileAppender,例如

<appender name="log" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="/srv/logs/myprogram.log" />
    <param name="Append" value="true" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n" />
    </layout>
</appender>

DatePattern可用于按小时轮换,例如使用

<param name="DatePattern" value="'.'hh" />


每小时有一个文件,每24小时覆盖一次。

来源:如果您需要精确旋转10 MB,您可以从DailRollingFileAppender派生您自己的Appender类,但我相信在大多数情况下,这是不值得的。我们和客户谈过,他要求日志文件只有在10MB时才滚动,而不是因为经过了一定的时间。除此之外,文件名必须包含整个日期和时间戳。据我所知,实现这一点的唯一可能性是扩展RollingFileAppender类并实现此功能?我还没有测试它,但它可能足以覆盖“public String getFile()'以每次返回不同的文件名。但由于每个文件名都不同,如果不跟踪旧文件,所有文件都将永久保存。使用cron作业或计划任务(dailrolling和full dates也存在同样的问题)一段时间后,只需删除它们即可。遗憾的是,我(目前)没有时间确切分析在扩展类中必须执行哪些代码更改。希望我能很快进一步分析这一点。我会回来的。可能是重复的