动态创建&销毁日志记录appender

时间:2009-08-06 14:25:34

标签: java log4j

我有一个传统的PSVM应用程序,我想将其日志记录输出重定向到每次执行的唯一文件。所以,如果我在10:00调用它,那么让它将它的输出重定向到{thread-id} -10:00.log;另一个执行线程可以在10:01开始执行,其输出将转到{thread-id} -10:01.log。我知道这不优雅。

我的问题是:

  • 这可能吗?
  • 有人知道如何接近吗?
  • 是否可以在不再需要时释放/销毁appender?

谢谢!

2 个答案:

答案 0 :(得分:4)

我会从FileAppender开始,并从中衍生出来创建自己的。只需修改您的版本以获取当前线程ID,并在创建之前将合适的线程ID /时间戳附加到该文件。你会维护(比方说)一个(缓冲的)FileWriters的地图,该地图键入了线程ID。

编写appender非常简单 - here's a Javaworld guide如何做到这一点。

在上面,您的程序是否可能在一分钟内启动两次?您是否要附加进程ID或类似内容以保持唯一性?

答案 1 :(得分:1)

这是不可能的,至少在log4j中不容易做到。但是,如果您使用logback(log4j的后续版本)查看SiftingAppender发货,它的目的是处理在运行时条件上创建appender以及在不再需要时删除它们。

如果应用程序需要在每次启动应用程序时只创建一个日志文件,则只需根据时间戳命名日志文件即可。如果您需要进一步的帮助,请在logback用户邮件列表上大喊。