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

发布于 2024-09-03 12:58:14 字数 157 浏览 2 评论 0 原文

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

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

例如: 程序_1.log 程序_2.log program_3.log

你知道我如何实现这一目标吗?

I am using the Apache commons logging library and log4j to generate my log files.

Now I want to create a new file every time I run my program. The current count should be appended to the log file's name.

For example:
program_1.log
program_2.log
program_3.log

Do you know how I could achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

带刺的爱情 2024-09-10 12:58:14

根据要求将我的评论变成答案:

您有什么理由不想使用时间戳吗?当我必须回顾日志文件时,我发现它们作为后缀更有意义。

Turning my comment into an answer, as requested:

Any reason why you don't want to use a timestamp? I've found them to be more meaningful as suffixes when I have to look back at log files.

月朦胧 2024-09-10 12:58:14

我认为 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);
  }

 ...

I think this is not supported by log4j, so you should create your own implementation, extending 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);
  }

 ...
嘿嘿嘿 2024-09-10 12:58:14

本文给出了如何写入动态确定的日志文件的示例。这使您可以在程序启动时灵活地确定所需的文件名。

最困难的部分是知道当前计数是多少。最简单的方法可能是对文件名进行二进制搜索以找到最大编号的文件名 - 这不会太糟糕 - 需要 log n 个文件存在测试,其中 n 是日志数。如果您有 100 万条日志,则只需进行 20 次文件检查。

This article gives an example of how to write to a dynamically determined log file. This gives you the flexibility to determine which filename you want when your program starts.

The hardest part is knowing what the current count is. It's probably simplest to do a binary search of the filenames to find the highest number filename - this wouldn't be too bad - requiring log n file existence tests where n is the number of logs. If you have 1 million logs, that's only 20 file checks.

居里长安 2024-09-10 12:58:14

看来普通的 Log4J 不支持这一点。但是,有一个 Log4J Extras Companion,包含它自己的 RollingFileAppender,它似乎可以通过 RollingPolicyTriggeringPolicy 参数。所以你可以尝试实施你自己的政策。

It seems that plain Log4J does not support this. However, there is a Log4J Extras Companion, containing its own RollingFileAppender, which seems to be quite freely configurable via RollingPolicy and TriggeringPolicy parameters. So you could try implementing your own policy.

野却迷人 2024-09-10 12:58:14

我假设您打算为每个 JVM 实例创建一个新文件。我认为你可以通过扩展 FileAppender。您可以查看 DatedFileAppender 的代码以获得一些灵感。

I assume that you intend to create a new file for each JVM instance. I think you can implement that (not trivial but not difficult) by extending FileAppender. You can look at the code of DatedFileAppender for some inspiration.

街道布景 2024-09-10 12:58:14

以一种不太优雅的方式,每次程序运行时,它都会创建一个文件 log_num.dat,它将在其中跟踪单个数字(要创建的下一个日志文件)。

In a less elegant way, every time your program runs it could create a file log_num.dat where it will keep track of a single number (the next log file to create).

娇纵 2024-09-10 12:58:14

这对我有用,

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

this works for me,

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文