我有一个在 Tomcat 7.0.2 上运行的应用程序,并使用 log4j 进行日志记录。 tomcat 启动后不久,catalina.out 中会出现以下消息:
INFO: Initializing log4j from [file:///export0/home/tomcat/appconf/log4j.xml]
log4j:WARN Unrecognized element rollingPolicy
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'PERFFILE'
log4j:WARN Unrecognized element rollingPolicy
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'FILE'
当我的实际日志消息应该打印时,我看到以下内容:
log4j:ERROR No output stream or file set for the appender named [FILE].
log4j:ERROR No output stream or file set for the appender named [PERFFILE].
这两个appender的定义如下:
<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="Append" value="true" />
<param name="File" value="${catalina.base}/logs/server.log" />
<rollingPolicy class="com.myapp.logging.AgingTimeBasedRollingFilePolicy">
<param name="fileNamePattern" value="${catalina.base}/logs/archive/server.%d{yyyy-MM-dd}.log.gz" />
<param name="keepFilesForDays" value="30" />
</rollingPolicy>
<layout class="com.myapp.logging.jboss.WebappAwarePattern">
<param name="ConversionPattern" value="%d{ISO8601}{${server.localTimezone}} %p [%X{webapp}:%c{2}] %m%n" />
</layout>
</appender>
<appender name="PERFFILE" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="Append" value="true" />
<param name="File" value="${catalina.base}/logs/performance.log" />
<rollingPolicy class="com.myapp.logging.AgingTimeBasedRollingFilePolicy">
<param name="fileNamePattern" value="${catalina.base}/logs/archive/performance.%d{yyyy-MM-dd}.log.gz" />
<param name="keepFilesForDays" value="30" />
</rollingPolicy>
<layout class="com.myapp.logging.jboss.WebappAwarePattern">
<param name="ConversionPattern" value="%d{ISO8601}{${server.localTimezone}} %p [%X{webapp}:%c{2}] %throwable{0} %m%n" />
</layout>
</appender>
我一直在努力弄清楚为什么会出现这个错误,但没有得到结果(可能是我的 log4j.xml 无法正确解析)
因此,任何关于为什么会发生这种情况的想法都将受到高度赞赏。
提前致谢!
最佳答案
取自 the Appenders documentation page :
Parameter Name Type Description
policy TriggeringPolicy The policy to use to determine
if a rollover should occur.
我认为您应该将 rollingPolicy
替换为 policy
。这可能取决于您使用的是 2.0 还是 1.2;我在 1.2 版本中没有看到 policy
。
关于log4j:无法识别的元素滚动策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999159/