DailyRollingFileAppender可以在午夜而不是下一条消息滚动日志吗?

时间:2012-06-05 10:55:20

标签: java logging log4j

我正在使用log4j进行日志记录。我有一个基于码头的模块。我需要每日记录,所以我使用DailyRollingFileAppender。问题是我需要在12:00 A.M滚动日志文件,此时它会在滚动之前等待新请求,是否有任何方法可以“强制”滚动过程?

2 个答案:

答案 0 :(得分:0)

我对此表示怀疑。日志记录服务必须生成一个等待一整天或依赖于某种计时器服务的线程。记录器很难尝试不依赖或消耗资源。您的应用每天都可以记录消息以触发翻转吗?您确定在没有消息的情况下您想要零长度的日志文件吗?否则,您可能需要继承appender。

答案 1 :(得分:0)

假设您引用的是Jetty自己的日志,而不是Webapp的日志:您可以使用jetty.logs系统属性覆盖基本​​日志目录。

取决于启动Jetty的方式,这可能与将属性添加到命令行一样简单。例如:

java -jar -Djetty.logs=/var/log/search-service/jetty.system.log start.jar

或者您可以使用如下log4j.xml文件:

<appender name="file" class="org.apache.log4j.RollingFileAppender">
    <param name="append" value="true" />
    <param name="maxFileSize" value="10MB" />
    <param name="maxBackupIndex" value="10" />
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
      <param name="fileNamePattern" value="${jetty.base}/logs/EZDataModeler_%d{yyyy-MM-dd}.log" />
    </rollingPolicy>
    <param name="file" value="${jetty.base}/logs/EZDataModeler_%d.log" />
    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" />
    <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>