2017-06-08 91 views
1

log4j2版本2.8log4j2配置記錄到文件而不是安慰

,我有以下log4j2.xmlsrc/main/resources

<?xml version="1.0" encoding="UTF-8"?> 

<Configuration status="WARN" monitorInterval="120"> 
    <Appenders> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout> 
       <Pattern>%d{yyyy-MM-dd HH.mm.ss} %5p %c{1}:%L - %m%n</Pattern> 
      </PatternLayout> 
     </Console> 
     <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="${env:CATALINA_HOME:-.}/logs/applicationlogs.log" 
           filePattern="${env:CATALINA_HOME:-.}/logs/$${date:yyyy-MM}/applicationlogs-%d{yyyy-MM-dd}-%i.log.gz"> 
      <PatternLayout> 
       <Pattern>%d{yyyy-MM-dd HH.mm.ss} %5p %c{1}:%L - %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="50 MB"/> 
      </Policies> 
     </RollingRandomAccessFile> 
    </Appenders> 
    <Loggers> 
     <AsyncLogger name="com.mypackage" level="trace" includeLocation="true" additivity="false"> 
      <AppenderRef ref="RollingRandomAccessFile"/> 
     </AsyncLogger> 
     <AsyncLogger name="org.springframework.jdbc" level="debug" includeLocation="true" additivity="false"> 
      <AppenderRef ref="RollingRandomAccessFile"/> 
     </AsyncLogger> 
     <Root level="info" includeLocation="true"> 
      <AppenderRef ref="STDOUT"/> 
      <AppenderRef ref="RollingRandomAccessFile"/> 
     </Root> 
    </Loggers> 
</Configuration> 

這正確地記錄到文件中,但沒有出現在控制檯。

這裏有什麼問題?

回答

1

正是由於additivity attribute

一旦事件到達其加設置爲false 事件記錄器將不會被傳遞給任何其父記錄器,無論 其加設置。

所以日誌事件只是沒有傳遞到根級別。 要登錄到控制檯添加

<AsyncLogger name="com.mypackage" level="info" includeLocation="true" additivity="false"> 
      <AppenderRef ref="STDOUT"/> 
     </AsyncLogger> 
+0

但是在這種情況下,所有跟蹤和調試級別日誌也將被打印在控制檯上。我不要那個。所有的首發和跟蹤應該只能到文件,但作爲「根」,建議所有的信息級別的日誌應該去的文件以及控制檯。 – Nik

+0

我已經更新了答案。希望它有幫助) –

+0

是的。它有助於理解這個問題!謝謝... – Nik

1

按照上面的回答,我這樣做:

<AsyncLogger name="com.mypackage" level="trace" includeLocation="true" additivity="false"> 
      <AppenderRef ref="RollingRandomAccessFile"/> 
     </AsyncLogger> 
     <AsyncLogger name="org.springframework.jdbc" level="debug" includeLocation="true" additivity="false"> 
      <AppenderRef ref="RollingRandomAccessFile"/> 
     </AsyncLogger> 
     <AsyncLogger name="com.mypackage" level="info" includeLocation="true" additivity="false"> 
      <AppenderRef ref="STDOUT"/> 
     </AsyncLogger> 
     <AsyncLogger name="org.springframework.jdbc" level="info" includeLocation="true" additivity="false"> 
      <AppenderRef ref="STDOUT"/> 
     </AsyncLogger> 

但現在,日誌只來安慰。日誌文件保持空白。

所以,我最後的解決辦法是:

  <AsyncLogger name="com.mypackage" level="trace" includeLocation="true" additivity="false"> 
       <AppenderRef ref="RollingRandomAccessFile"/> 
      </AsyncLogger> 
      <AsyncLogger name="org.springframework.jdbc" level="debug" includeLocation="true" additivity="false"> 
       <AppenderRef ref="RollingRandomAccessFile"/> 
      </AsyncLogger> 
      <AsyncLogger name="com.mypackage" level="info" includeLocation="true" additivity="false"> 
       <AppenderRef ref="STDOUT"/> 
       <AppenderRef ref="RollingRandomAccessFile"/> 
      </AsyncLogger> 
      <AsyncLogger name="org.springframework.jdbc" level="info" includeLocation="true" additivity="false"> 
       <AppenderRef ref="STDOUT"/> 
       <AppenderRef ref="RollingRandomAccessFile"/> 
      </AsyncLogger> 

這和預期一樣。

相關問題