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
How do I overwrite a log file in log4j?
提问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>