Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Log4j2中,使用RollingFile appender,如何向滚动文件名添加唯一id?_Java_Log4j2_Rollingfileappender - Fatal编程技术网

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

Java 在Log4j2中,使用RollingFile appender,如何向滚动文件名添加唯一id?,java,log4j2,rollingfileappender,Java,Log4j2,Rollingfileappender,我使用的是一个RollingFile Appender,具有时间(每日)和大小触发策略。 filePattern(用于在滚动时重命名文件)包含: filePattern="app-${sys:node}-%d{yyyyMMdd}-%i" 我想在滚动文件名中添加一个随机id(最好是uuid)。 通常情况下,日期模式和整数计数器足以唯一标识文件…但在我的情况下,日志会通过ftp自动拾取(如果成功传输,则会被删除)。由于文件删除,最终可能会出现重复文件(在ftp上,而不是本地)。。。因为%i计数器

我使用的是一个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。这就是我想要避免的


有解决方案吗?

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

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

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

可能更容易删除一整天,只是为了防止发生这种情况。。。