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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/965614/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 21:40:48  来源:igfitidea点击:

How do I overwrite a log file in log4j?

javalog4joverwrite

提问by Geo

I have a log file that has the following appender added to it :

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


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

the thing is, each time I'm running my application, additional logging information gets appended to the same log file. What can I do to overwrite the file each time ?

问题是,每次我运行我的应用程序时,额外的日志信息都会附加到同一个日志文件中。我可以做些什么来每次覆盖文件?

采纳答案by Marko

Use RollingFileAppender.

使用 RollingFileAppender。

回答by matt b

If you have an appender declared like so in a properties file:

如果您在属性文件中声明了一个 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

Then what you want to add is

那么你要添加的是

log4j.appender.LOGFILE.Append=false

The default value is true.

默认值为true

So, if you are declaring your appenders programmatically, then what you want to do is call setAppend(false).

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

回答by Ceki

The previous answer by Matt is correct except that it uses a properties file. If you are looking for a programmatic approach, I suggest that you disable append mode by modify your code as follows:

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

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

回答by Jon Ison

Add to your XML file the following line:

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

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

Note that due to odd XML parsing in log4j, the <param>elements must appear in a block (not intermingled with other types of elements).

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

For example, this works:

例如,这有效:

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

But this doesn't (!)

但这不是(!)

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