我有一个日志文件,其中添加了以下appender:
logger.addAppender(new FileAppender(new PatternLayout(),"log.txt"));
事实上,每次我运行我的应用程序时,额外的日志记录信息都会附加到同一个日志文件中。我每次都可以做什么来覆盖文件?
答案 0 :(得分:35)
如果在属性文件中声明了这样的appender:
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=file.log
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d %-5p %c - %m%n
然后你要添加的是
log4j.appender.LOGFILE.Append=false
默认值为true
。
因此,如果您以编程方式声明您的appender,那么您要做的就是致电setAppend(false)
。
答案 1 :(得分:6)
使用RollingFileAppender。
答案 2 :(得分:6)
Matt先前的回答是正确的,只是它使用属性文件。如果您正在寻找程序化方法,我建议您通过修改代码来禁用追加模式,如下所示:
logger.addAppender(new FileAppender(new PatternLayout(),"log.txt", **false**));
答案 3 :(得分:6)
在XML文件中添加以下行:
<param name="Append" value="false" />
请注意,由于log4j中的奇数XML解析,<param>
元素必须出现在块中(不与其他类型的元素混合)。
例如,这有效:
<appender name="appender-log" class="org.apache.log4j.FileAppender">
<param name="File" value="efoimporter.log" />
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
但这不是(!)
<appender name="appender-log" class="org.apache.log4j.FileAppender">
<param name="File" value="efoimporter.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
<param name="Append" value="false" />
</appender>