如何覆盖 log4j 中的日志文件?

2022-09-02 02:30:57

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


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

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


答案 1

如果您在属性文件中声明了类似这样的追加器:

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

因此,如果您以编程方式声明附加程序,那么您要做的就是调用 。setAppend(false)


答案 2

将以下行添加到 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>

推荐