我正在使用Apache commons日志库和log4j来生成我的日志文件。
现在我想在每次运行程序时创建一个新文件。应将当前计数附加到日志文件的名称。
例如: program_1.log program_2.log program_3.log
你知道我怎么能做到这一点吗?
答案 0 :(得分:1)
我认为log4j不支持这个,所以你应该创建自己的实现,扩展FileAppender:
public class CustomAppender extends FileAppender {
...
public
CustomAppender(Layout layout, String filename, boolean append, boolean bufferedIO,
int bufferSize) throws IOException {
this.layout = layout;
// file name will be the basis; you should calculate the suffix yourself
customname = filename + ...
this.setFile(customname, append, bufferedIO, bufferSize);
}
...
答案 1 :(得分:1)
This article给出了如何写入动态确定的日志文件的示例。这使您可以灵活地确定程序启动时所需的文件名。
最难的部分是了解当前的数量。最简单的方法是对文件名进行二进制搜索以找到最高编号的文件名 - 这不会太糟糕 - 需要log n文件存在测试,其中n是日志数。如果你有100万个日志,那只有20个文件检查。
答案 2 :(得分:1)
根据要求将我的评论转化为答案:
您不想使用时间戳的任何原因?当我不得不回顾日志文件时,我发现它们作为后缀更有意义。
答案 3 :(得分:0)
似乎普通的Log4J不支持这一点。但是,有一个Log4J Extras Companion,包含自己的RollingFileAppender,它似乎可以通过RollingPolicy和TriggeringPolicy参数自由配置。所以你可以尝试实施自己的政策。
答案 4 :(得分:0)
我假设您打算为每个JVM实例创建一个新文件。我认为你可以通过扩展FileAppender来实现这一点(不是微不足道的,但并不困难)。您可以查看DatedFileAppender的代码以获得一些灵感。
答案 5 :(得分:0)
以不太优雅的方式,每次程序运行时,它都可以创建一个文件log_num.dat,它将跟踪一个数字(要创建的下一个日志文件)。
答案 6 :(得分:0)
这对我有用,
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="TRACE" />
<param name="File" value="amLog.log"/>
<param name="DatePattern" value="'.'YYYY-MM-dd-HH-mm"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" />
</layout>