log4J:使用TimeBasedRollingPolicy进行关闭后翻转操作失败

时间:2012-07-13 07:43:25

标签: log4j

我已经设置TimeBasedRollingPolicy每分钟推出文件(用于测试目的),我面临的问题是警告,并且没有创建zip或gz文件。警告是:

  

log4j:WARN关闭后翻转操作失败

我附上了来源以找出问题,但还没有成功。我在log4j.xml中缺少任何配置吗?

<appender name="errorAppender" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="File" value="C:/error.log"/>
        <param name="Append" value="true"/>
        <param name="BufferedIO" value="true"/>
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="C:/error.%d{ddMMMyyyy HH:mm:ss}.log.gz" />
        <param name="ActiveFileName" value="C:/error.log"/>
    </rollingPolicy>

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %C (line:%L) - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="error"/>
            <param name="LevelMin" value="error"/>
            <param name="AcceptOnMatch" value="true"/>
        </filter>
    </appender>

我使用的是log4j-1.2.17和apache-log4j-extras-1.1。有人看过这个问题或有任何线索吗?

6 个答案:

答案 0 :(得分:5)

log4j:WARN关闭后翻转操作失败 ”消息的问题是,在基于Windows的系统中,您无法使用“:”创建文件名: “char,因此指定的FileNamePattern不应包含以下任何一个:\,/,:,*,?,”,&lt;,&gt;,|

这是我的应用程序的log4j.xml,使用滚动文件appender可以正常工作。出于测试目的,我每隔一段时间就开始创建一个新文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="consola" class="org.apache.log4j.ConsoleAppender"> 
    <param name="target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="conversionPattern" value="[%d{yyyyMMdd HH:mm:ss:mm,SSS}]%-5p [%t] [%c{1}-%M:%L] - %m%n"/>
    </layout> 
  </appender> 

  <appender name="desarr" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="Append" value="false"/>
    <rollingPolicy name="desarr" class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="fileNamePattern" value="C:/workspace/Probador/log/backups/importacion222.log_%d{mmss_mm}"/>
        <param name="activeFileName" value="C:/workspace/Probador/log/importacion222.log"/>
    </rollingPolicy> 
   <layout class="org.apache.log4j.PatternLayout"> 
        <param name="conversionPattern" value="[%d{yyyyMMdd HH:mm:ss:mm,SSS}]%-5p [%t] [%c{1}-%M] - %m%n"/>
   </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="consola" /> 
    <appender-ref ref="desarr"/>
  </root>

</log4j:configuration>

特别注意:

<param name="fileNamePattern" value="C:/workspace/Probador/log/backups/importacion222.log_%d{mmss_mm}"/>

在尝试压缩文件之前尝试此操作。

答案 1 :(得分:3)

我在log4j中遇到了与WARN消息相同的问题 - “log4j:WARN在关闭后翻转操作失败”并且日志文件没有翻转。导致日志文件写入的目录上的权限问题不足导致root。在这种情况下,Java的File.renameTo()方法无声地失败(只返回一个布尔值false)。花了很多时间来弄清楚这个问题:(

答案 2 :(得分:2)

  

我使用的是log4j-1.2.17和apache-log4j-extras-1.1。有人见过   这个问题并且有任何线索吗?

我还使用log4j-1.2。 16 和apache-log4j-extras-1.1观察到了这个问题。完全相同的消息。

我尝试了各种调整无济于事。似乎观察到 rollingPolicy-&gt; FileNamePattern 的唯一时间是在没有 appender-&gt;文件参数和 rollingPolicy-&gt; ActiveFileName <的情况下使用它/ strong>参数。但即便如此,我还没有看到它成功翻转,也没有看到 gz zip 以前的文件。

我也收到相同的消息:

log4j: setFile called: somepath/somefile.log, true
log4j: setFile ended
log4j:WARN Failure in post-close rollover action

非常令人沮丧。

答案 3 :(得分:1)

我也有同样的问题,但在我的情况下,这是因为'fileNamePattern'路径文件夹不存在。正在创建对我有用的翻译和翻转文件。

答案 4 :(得分:1)

对我来说,解决方案是手动创建存档文件的目录。

答案 5 :(得分:1)

如果您正在使用org.apache.log4j.rolling.TimeBasedRollingPolicy rollingPolicy,那么该目录必须存在才能使log4j能够旋转。

例如,以下翻转仅在/ var / log / blah / archive / YYYY / MM目录存在时才有效;在夜间cronjob创建它应该做的伎俩。而且,如前所述,当没有足够的权限来创建日志文件时,也会发生这种情况。

  <appender name="infoFile"
            class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="threshold"
           value="INFO"/>
    <param name="append"
           value="true"/>
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
      <param name="ActiveFileName"
             value="/var/log/blah/file.log"/>
      <!-- IMPORTANT the archive folder must already exist, or log4j cannot
      put the rotated log there, and will keep using the old one -->
      <param name="FileNamePattern"
             value="/var/log/blah/archive/%d{yyyy}/%d{MM}/file.log.%d{yyyy-MM-dd}.gz"/>
    </rollingPolicy>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern"
             value="%5p | %-40c{2} | %-4L | %d{yyyy-MM-dd}T%d{HH:mm:ss} | %m%n"/>
    </layout>
  </appender>