在Log4j2中,使用RollingFile appender,如何在滚动文件名中添加唯一ID?

时间:2018-02-05 13:43:53

标签: java log4j2 rollingfileappender

我正在使用具有时间(每日)和大小触发策略的RollingFile Appender。 filePattern(用于在翻转时重命名文件)包含:

filePattern="app-${sys:node}-%d{yyyyMMdd}-%i" 

我想在滚动的文件名中添加一个随机ID(理想情况是一个uuid)。 通常,日期模式和整数计数器足以唯一标识文件...但在我的情况下,日志会通过ftp自动获取(如果成功传输则会被删除)。由于文件删除,最终可能会有一个重复的文件(在ftp上,而不是在本地)...因为%i计数器是基于本地已经存在的文件。

例如,有:

  • app-20180205-1.log
  • APP-20180205-2.log
  • APP-20180205-3.log

和log4j2目前正在写信,让我们说:/tmp/app.log

如果已经滚动的3个文件通过ftp传输并删除,则在下一次滚动时,我将使用app-20180205-1.log而不是app-20180205-4.log。这就是我试图避免的。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

您可以使用具有更具体时间分辨率的更具体的日期时间文件模式,而不是UUID,如下所示:

filePattern="logs/log4j2-demo-%d{yyyy-MM-dd-HH-mm-ss}-%i.log

当您的时间/触发器策略满足时,它将创建一个新文件,其中包含更具体的日期时间戳,根据您指定的时间分辨率,它应始终是唯一的。