dynamically creating & destroying logging appender

2019-06-22 08:55发布

I have a legacy PSVM application which I'd like to redirect its logging output to unique files per execution. So, if I invoke it at 10:00, then have it redirect it's output to {thread-id}-10:00.log; and another thread of execution may begin an execution at 10:01, and its output would go to {thread-id}-10:01.log. I understand that this is not elegant.

My questions are:

  • is this possible?
  • does someone have an idea of how to approach?
  • is it possible to release/destroy an appender when it's no longer needed?

Thanks!

标签: java log4j
2条回答
相关推荐>>
2楼-- · 2019-06-22 09:35

It is not possible, at least not easy to do in log4j. However, if you look at SiftingAppender shipping with logback (log4j's successor), it is designed to handle the creation of appenders on runtime criteria as well as their removal when no longer needed.

If you application needs to create just one log file per application launch, you could simply name your log file based on a timestamp. Shout on the logback-user mailing list if you need further assistance.

查看更多
狗以群分
3楼-- · 2019-06-22 09:37

I would start with FileAppender and derive from that to create your own. Simply modify your version to get the current thread id and append a suitable thread-id/timestamp to the file prior to creation. You would maintain (say) a map of (buffered) FileWriters keyed on thread id.

Writing appenders is quite trivial - here's a Javaworld guide on how to do it.

In the above, is it at all likely that your program will start up twice in one minute ? Would you want to append a process id or similar to maintain uniqueness ?

查看更多
登录 后发表回答