Configuring RollingFileAppender in log4j
我正在开发一套Web服务,我们希望每天都有轮换日志。
我正在尝试从log4j Extras同伴中获取
我在类路径上同时拥有主log4J库(
我在
1 2 3 4 5 6 7 8 | ### 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服务时,出现以下错误消息:
1 2 3 4 5 6 7 8 | 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. |
我已经找到了有关如何少量配置此追加器的文档,所以有人可以帮助我修复我的配置吗?
EDIT0:添加了调试模式输出,而不仅仅是标准警告
我遇到了类似的问题,只是找到了解决问题的方法(单步执行
好消息是,与其他地方所写的不同,事实是您实际上可以使用log4j.properties配置TimeBasedRollingPolicy(不需要XML配置!至少在log4j> 1.2.16的版本中请参见此错误报告)。
这是一个例子:
1 2 3 |
顺便说一句,我在Amazon EC2上使用
1 2 | p.setProperty("instanceId", EC2Util.getMyInstanceId()); PropertyConfigurator.configure(p); |
使这项工作面临更多的问题。详细信息如下:
以下是对我有用的Appender配置:
1 2 3 4 5 6 7 8 9 10 11 12 | <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> |
更新:至少早在2013年(请参阅Mubashar的评论),它就开始起作用。
根据Log4jXmlFormat,您不能使用log4j.properties对其进行配置,而只能使用XML配置格式:
Note that TimeBasedRollingPolicy can only be configured with xml, not log4j.properties
不幸的是,它们提供的示例log4j.xml也不起作用:
1 2 3 4 | 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' |
Toolbear74是正确的log4j.XML是必需的。
为了使XML验证
我建议设置日志记录阈值
创建Log4j.xml文件时,不要忘记将log4j.dtd复制到同一位置。
这是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="windows-1252"?> <!DOCTYPE log4j:configuration SYSTEM"log4j.dtd"> <log4j:configuration> <!-- Daily Rolling File Appender that compresses old files --> <param name="threshold" value="info"/> <rollingPolicy name="file" class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <param name="FileNamePattern" value="${catalina.base}/logs/myapp.log.%d{yyyy-MM-dd}.gz"/> <param name="ActiveFileName" value="${catalina.base}/logs/myapp.log"/> </rollingPolicy> <layout class="org.apache.log4j.EnhancedPatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %-5p - %-26.26c{1} - %m%n" /> </layout> </appender> <root> <priority value="debug"></priority> </root> </log4j:configuration> |
考虑到您设置
尝试重命名您的log4j.properties并放入类似于我的示例的log4j.xml,看看会发生什么。
关于错误:
如果是这样,请确保您的log4j.jar在包含较旧log4j.jar的第三方之前排在第一位。
在Log4j2中," extras"库不再是必需的。配置格式也已更改。
Apache文档中提供了一个示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | property.filename = /foo/bar/test.log appender.rolling.type = RollingFile appender.rolling.name = RollingFile appender.rolling.fileName = ${filename} appender.rolling.filePattern = /foo/bar/rolling/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n appender.rolling.policies.type = Policies appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.interval = 2 appender.rolling.policies.time.modulate = true appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size=100MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 5 logger.rolling.name = com.example.my.class logger.rolling.level = debug logger.rolling.additivity = false logger.rolling.appenderRef.rolling.ref = RollingFile |
我怀疑
我不知道指定未知属性会做什么,但是可能会导致包含对象被放弃,这可能会导致您看到警告。
尝试忽略它,看看会发生什么。
您的包裹名称不正确
1 | org.apache.log4j.rolling.RollingFileAppender |
正确的是:
1 | org.apache.log4j.RollingFileAppender |