在log4j中配置RollingFileAppender

chr*_*ney 40 java logging log4j

我正在研究一组Web服务,我们希望每天都有一个旋转日志.

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

我在类路径上有主要的log4J library(log4j-1.2.15.jar)和log4j extras library(apache-log4j-extras-1.1.jar).

我在log4j.properties文件中为appender配置了以下配置:

### 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
Run Code Online (Sandbox Code Playgroud)

但是,当我在调试模式下使用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.
Run Code Online (Sandbox Code Playgroud)

我找到了关于如何配置这个appender有点稀疏的文档,那么任何人都可以帮我修复我的配置吗?

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

Pie*_*e D 62

我有一个类似的问题,只是找到了解决它的方法(通过单步执行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
Run Code Online (Sandbox Code Playgroud)

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

p.setProperty("instanceId", EC2Util.getMyInstanceId());
PropertyConfigurator.configure(p);
Run Code Online (Sandbox Code Playgroud)


Jam*_*hin 20

在完成这项工作时面临更多问题.以下是详细信息:

  1. 要下载并添加apache-log4j-extras-1.1.jar类路径,最初没有注意到这一点.
  2. RollingFileAppender应该是org.apache.log4j.rolling.RollingFileAppender代替org.apache.log4j.RollingFileAppender.这可以给出错误:log4j:ERROR No output stream or file set for the appender named [file].
  3. 我们不得不将log4j库升级log4j-1.2.14.jarlog4j-1.2.16.jar.

以下是适用于我的appender配置:

<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>
Run Code Online (Sandbox Code Playgroud)


too*_*ear 16

更新:至少早在2013年(参见Mubashar的评论)就开始了.


根据Log4jXmlFormat,您无法使用log4j.properties配置它,但只能使用XML配置格式:

请注意,TimeBasedRollingPolicy只能使用xml配置,而不能使用log4j.properties配置

不幸的是,它们提供的示例log4j.xml也不起作用:

log4j:ERROR Parsing error on line 14 and column 76
log4j:ERROR Element type "rollingPolicy" must be declared.
...
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'FILE'
Run Code Online (Sandbox Code Playgroud)

  • 这可能是你回答的日期,但它适用于log4j.properties文件,至少对我而言 (3认同)