每次运行程序时都创建一个新的日志文件

时间:2010-06-01 13:37:07

标签: java logging log4j apache-commons-logging

我正在使用Apache commons日志库和log4j来生成我的日志文件。

现在我想在每次运行程序时创建一个新文件。应将当前计数附加到日志文件的名称。

例如: program_1.log program_2.log program_3.log

你知道我怎么能做到这一点吗?

7 个答案:

答案 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,它似乎可以通过RollingPolicyTriggeringPolicy参数自由配置。所以你可以尝试实施自己的政策。

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