2017-09-09 48 views
0

正如标题中提到,RollingFile附加器有时未能GZ日志文件,有时我得到xxx.txt有时会xxx.gz在存档文件夹中,配置是如下:log4j的2 RollingFile有时未能GZ日志文件

<RollingFile name="dev1Log" fileName="E:/test/logs/dev1Log.txt" 
       filePattern="E:/test/logs/archived/$${date:yyyy-MM}/dev1Log.txt-%d{yyyy-MM-dd}-%i.txt.gz"> 
     <PatternLayout pattern="%-5p:[%c.class(%c{1}.java:%L)] %m%n"/>    
     <Policies> 
      <TimeBasedTriggeringPolicy /> 
      <SizeBasedTriggeringPolicy size="1 M"/> 
     </Policies> 
     <DefaultRolloverStrategy max="100"/> 
    </RollingFile> 

错误日志如下:

2017-09-09 16:26:57,582 ContainerBackgroundProcessor[StandardEngine[Catalina]] T 
RACE DefaultRolloverStrategy.purge() took 182.0 milliseconds 
2017-09-09 16:26:57,582 ContainerBackgroundProcessor[StandardEngine[Catalina]] D 
EBUG RollingFileManager executing synchronous FileRenameAction[E:\andro_web\log4 
j\mlWebLogs\xxxdev1Log.txt to E:\andro_web\log4j\mlWebLogs\archived\2017-09\xxxd 
ev1Log.txt-2017-09-09-100.txt, renameEmptyFiles=false] 
2017-09-09 16:26:57,582 ContainerBackgroundProcessor[StandardEngine[Catalina]] E 
RROR Unable to move file E:\andro_web\log4j\mlWebLogs\xxxdev1Log.txt to E:\andro 
_web\log4j\mlWebLogs\archived\2017-09\xxxdev1Log.txt-2017-09-09-100.txt: java.ni 
o.file.FileSystemException E:\andro_web\log4j\mlWebLogs\xxxdev1Log.txt -> E:\and 
ro_web\log4j\mlWebLogs\archived\2017-09\xxxdev1Log.txt-2017-09-09-100.txt: 程序 
無法存取檔案,因為檔案正由另一個程序使用。(Chinese means: The program can not access the file because the file is being used by another program.) 

回答

1

请在您的配置的顶部设置<Configuration status="trace">。这将在控制台上打印内部Log4j2调试日志。要解决此问题,请在翻滚过程中张贴印在控制台上的Log4j2内部状态消息。


如果Windows上的多个进程使用相同的Log4j2配置,则翻转可能会失败。这不是Log4j2的行为,但取决于操作系统。 Windows不允许删除另一个进程正在使用的文件。

一个常见原因是相同的Log4j2配置(记录到相同的日志文件)在多个应用程序之间共享。这应该避免。

在同一Web容器中运行的Web应用程序可能共享日志记录配置,但需要注意。有关详细信息,请参阅Log4j2用户手册section on web applications