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