Java 如何在log4j中覆盖日志文件?

Java 如何在log4j中覆盖日志文件?,java,log4j,overwrite,Java,Log4j,Overwrite,我有一个日志文件,其中添加了以下appender: logger.addAppender(new FileAppender(new PatternLayout(),"log.txt")); 问题是,每次我运行我的应用程序时,附加的日志信息都会附加到同一个日志文件中。每次如何覆盖该文件?使用RollingFileAppender。如果属性文件中有这样声明的appender: log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.a

我有一个日志文件,其中添加了以下appender:


logger.addAppender(new FileAppender(new PatternLayout(),"log.txt"));

问题是,每次我运行我的应用程序时,附加的日志信息都会附加到同一个日志文件中。每次如何覆盖该文件?

使用RollingFileAppender。

如果属性文件中有这样声明的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)

Matt前面的回答是正确的,只是它使用了一个属性文件。如果您正在寻找一种编程方法,我建议您通过如下修改代码来禁用追加模式:

logger.addAppender(new FileAppender(new PatternLayout(),"log.txt", **false**));

将以下行添加到XML文件中:

<param name="Append" value="false" />

请注意,由于log4j中存在奇怪的XML解析,
元素必须出现在块中(不能与其他类型的元素混合)

例如,这项工作:

<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>

但这不是(!)


API链接:另外,向FileAppender发送另一个带有假值的布尔参数也会产生相同的结果。
<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>