5

我已经设置 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。有没有人看到这个问题或有任何线索?

4

6 回答 6

6

Problem with "log4j:WARN Failure in post-close rollover action" message is that in windows-based systems you can not create a file name with the ":" char, so the FileNamePattern specified should not contain any one of these: \, /, :, *, ?, ", <, >, |

Here it is a log4j.xml for my application that works fine using a rolling file appender. For testing purposes I made the rolling to create a new file every second:

<?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>

Special attention to:

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

Try this before attempting to zip the file.

于 2013-02-12T16:58:43.543 回答
3

我在 log4j 中使用 WARN 消息遇到了同样的问题 - “log4j:WARN Failure in post-close rollover action”并且日志文件没有翻转。这是由于日志文件被写入的目录的权限不足问题导致的。在这种情况下,Java 的 File.renameTo() 方法默默地失败了(只是返回一个布尔值 false)。花了很多时间来解决这个问题:(

于 2013-04-03T10:48:30.717 回答
2

我正在使用 log4j-1.2.17 和 apache-log4j-extras-1.1。有没有人看到这个问题并对此有任何线索?

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

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

我也收到相同的消息:

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

非常令人沮丧。

于 2012-07-19T01:10:08.773 回答
2

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

于 2013-10-24T13:34:10.477 回答
1

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

于 2013-02-04T07:06:33.493 回答
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>
于 2014-08-15T06:06:26.397 回答