2015-11-02 53 views
0

我要寻找某种形式的清单,这将帮助我解决以下问题:如何识别未记录日志的原因?

我有运行Tomcat 8 web应用程序。我使用Log4J2 v2.1Apache Commons Logging v1.2。我的应用程序记录了几天,然后突然停止记录。没有任何例外被记录。没有!

我无法理解为什么发生这种情况以及可能是什么原因。此外,我不知道如何努力寻找根本原因。

顺便说一句,系统有足够的可用磁盘空间〜500GB和tomcat日志,如localhost_access日志和其他人继续记录不间断。

编辑:按照要求,张贴log4j2配置 -

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%p [%t] %c{1}.%M(%L) | %m%n"/> 
     </Console> 

     <RollingFile name="RollingFile" fileName="../logs/app.log" 
           filePattern="../app/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} [REQ_ID|%X{REQUEST_UUID}] %p [%t] %c{1}.%M(%L) | %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy/> 
       <TimeBasedTriggeringPolicy interval="6" modulate="true"/> 
       <SizeBasedTriggeringPolicy size="5 MB"/> 
      </Policies> 
     </RollingFile> 
    </Appenders> 

    <Loggers> 
     <Logger ... /> 
     ... 
     <Root level="debug"> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
</Configuration> 
+0

请发布您的完整log4j配置文件。 –

回答

0

通常的罪魁祸首这里是该文件由日志轮换工具改名。如果它在几天后发生,那么日志旋转工具被配置为在文件达到一定大小时将文件移开。这些工具通常会压缩日志文件。

会发生什么事是:

  1. Java进程打开日志文件。 OS分配一个文件描述符。
  2. 过了一段时间后,日志旋转工具会重命名该文件。由于Java写入文件描述符,它不会注意或关心重命名(文件描述符保持不变)。
  3. 然后该工具压缩文件。为此,创建一个新文件(压缩文件)。
  4. 当日志被压缩时,该工具将删除原始日志文件。
  5. Java继续写入文件描述符。由于描述符不再连接到目录条目,因此无法看到它。

解决方案:在Java日志记录工具中配置日志轮换或将其配置为与外部日志轮换工具配合使用。

+0

日志循环在log4j2.xml文件的log4j2配置中进行配置。任何其他方式检查了这一点? – Rishabh

+0

@Rishabh你100%肯定没有人在操作系统级别配置日志轮回?在这种情况下,您需要使用远程调试选项启动应用程序。然后,可以在远程调试器停止工作时连接到它。我的猜测是你在某个地方有一个死锁。 –

+0

是的,我相信在操作系统级别没有任何日志轮转,因为我自己配置​​了它。按照建议调试“死锁”。 – Rishabh