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

Geo*_*Geo 18 java log4j overwrite

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


logger.addAppender(new FileAppender(new PatternLayout(),"log.txt"));
Run Code Online (Sandbox Code Playgroud)

问题是,每次我运行我的应用程序时,额外的日志记录信息都会附加到同一个日志文件中.我每次都能覆盖文件怎么办?

mat*_*t b 36

如果在属性文件中声明了这样的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
Run Code Online (Sandbox Code Playgroud)

然后你要添加的是

log4j.appender.LOGFILE.Append=false
Run Code Online (Sandbox Code Playgroud)

默认值为true.

所以,如果你以编程方式声明你的appender,那么你想要做的就是调用setAppend(false).


Mar*_*rko 6

使用RollingFileAppender.

  • 此外,向 FileAppender 发送另一个带有 false 值的布尔参数会产生相同的结果。 (2认同)

Cek*_*eki 6

Matt先前的回答是正确的,除了它使用属性文件.如果您正在寻找程序化方法,我建议您通过修改代码来禁用追加模式,如下所示:

logger.addAppender(new FileAppender(new PatternLayout(),"log.txt", **false**));
Run Code Online (Sandbox Code Playgroud)


小智 6

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

<param name="Append" value="false" />
Run Code Online (Sandbox Code Playgroud)

请注意,由于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>
Run Code Online (Sandbox Code Playgroud)

但这不是(!)

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