在 log4j 中配置 RollingFileAppender

2022-09-01 01:18:32

我正在开发一组Web服务,我们希望有一个每日轮换的日志。

我试图从log4j extras伴侣那里获得工作,因为文档表明这最适合生产环境。org.apache.log4j.rolling.RollingFileAppender

我在类路径上有主log4J库()和log4j附加库()。log4j-1.2.15.jarapache-log4j-extras-1.1.jar

我在文件中为追加器提供了以下配置:log4j.properties

### SOAP Request Appender
log4j.appender.request=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.request.File=SOAPmessages.log
log4j.appender.request.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.request.RollingPolicy.ActiveFileName =SOAPmessages-%d.log
log4j.appender.request.RollingPolicy.FileNamePattern=SOAPmessages-%d.log.zip
log4j.appender.request.layout = org.apache.log4j.PatternLayout
log4j.appender.request.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

但是,当我在调试模式下使用log4j启动Web服务时,我收到以下错误消息:

log4j: Parsing appender named "request".
log4j: Parsing layout options for "request".
log4j: Setting property [conversionPattern] to [%d{ABSOLUTE} %5p %c{1}:%L - %m%n].
log4j: End of parsing for "request".
log4j: Setting property [file] to [/logs/SOAPmessages.log].
log4j:WARN Failed to set property [rollingPolicy] to value "org.apache.log4j.rolling.TimeBasedRollingPolicy". 
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'request'
log4j: Parsed "request" options.

我发现有关如何配置此附加器的文档有点稀疏,因此任何人都可以帮助我修复我的配置吗?

编辑0:添加了调试模式输出,而不仅仅是标准警告


答案 1

我有一个类似的问题,只是找到了一种方法来解决它(通过单步执行源代码,同样...log4j-extras

好消息是,与到处都写的内容不同,事实证明,您实际上可以使用log4j.properties配置TimeBasedRollingPolicy(不需要XML配置!至少在 log4j >1.2.16 的版本中,请参阅此错误报告)

下面是一个示例:

log4j.appender.File = org.apache.log4j.rolling.RollingFileAppender
log4j.appender.File.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.File.rollingPolicy.FileNamePattern = logs/worker-${instanceId}.%d{yyyyMMdd-HHmm}.log

顺便说一句,这个位是我在亚马逊的EC2上使用的东西,用于将日志与我的所有工人区分开来 - 我只需要在调用之前设置该属性,如下所示:${instanceId}PropertyConfigurator.configure()

p.setProperty("instanceId", EC2Util.getMyInstanceId());
PropertyConfigurator.configure(p);

答案 2

在进行这项工作时遇到了更多问题。以下是详细信息:

  1. 要下载并添加类路径,起初没有注意到这一点。apache-log4j-extras-1.1.jar
  2. 应为 而不是 。这可能会给出错误:RollingFileAppenderorg.apache.log4j.rolling.RollingFileAppenderorg.apache.log4j.RollingFileAppenderlog4j:ERROR No output stream or file set for the appender named [file].
  3. 我们不得不将 log4j 库从 升级到 .log4j-1.2.14.jarlog4j-1.2.16.jar

以下是对我有用的附加器配置:

<appender name="file" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="threshold" value="debug" />
        <rollingPolicy name="file"
            class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="logs/MyLog-%d{yyyy-MM-dd-HH-mm}.log.gz" />
            <!-- The below param will keep the live update file in a different location-->
            <!-- param name="ActiveFileName" value="current/MyLog.log" /-->
        </rollingPolicy>

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        </layout>
</appender>

推荐