2013-07-02 77 views
22

我希望做兩件事情:log4j2 xml配置 - 記錄到文件和控制檯(不同級別)

  1. 登錄具有一定級別的LOG安慰
  2. 日誌與其他日誌級別到文件

控制檯日誌記錄似乎工作得很好,但日誌文件保持爲空。

這是我log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="WARN"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 

    <File name="MyFile" fileName="logs/app.log" immediateFlush="true"> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 

    </appenders> 
    <loggers> 

    <logger name="filelogger" level="error"> 
     <appender-ref ref="MyFile"/> 
    </logger> 

    <root level="info"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

可能是什麼問題?

回答

39

我想通了!在這種情況下不應該使用<Logger>標籤,有關詳細信息,請參閱Gaurang Patel的答案。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="WARN"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 

    <File name="MyFile" fileName="logs/app.log"> 
     <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File>    
    </appenders> 

    <loggers>  
    <root level="debug"> 
     <appender-ref ref="Console" level="info"/> 
     <appender-ref ref="MyFile" level="error"/> 
    </root>  
    </loggers> 
</configuration> 
+5

所以這是什麼問題?在沒有解釋的情況下發布解決方案並不會幫助 –

+2

我在我發佈的答案中添加了解釋。 –

5

<logger name="filelogger" level="error" >
這應該是問題所在。記錄器的名稱通常是您的軟件包名稱(除非您已專門命名爲filelogger)。
嘗試<logger name="com.yourpackage" level="error" additivity="true">

參考Log4j2 Doc

+0

感謝。它爲文件日誌記錄工作,但現在控制檯輸出消失。那裏有什麼不對? – daker

+0

編輯我的答案添加'additivity =「真」' – basiljames

+0

加法是默認true true log4j2 –

11

雖然Daker已經把修正的配置文件,但他沒有解釋它。我想在這裏添加解釋。如Log4j2文檔here中所引用的,對於給定要求,不需要使用<記錄器>標籤。進一步當你應該使用<記錄器>標籤?請閱讀下面的說明文檔,

也許希望消除除了com.foo.Bar之外的所有TRACE輸出 。只需更改日誌級別就不會完成任務 。取而代之的是,該解決方案是一個新的記錄器 定義添加到配置:

<Loggers> 
    <Logger name="com.foo.Bar" level="TRACE"/> 
    <Root level="ERROR"> 
    <AppenderRef ref="STDOUT"> 
    </Root> 
    ... 
</Loggers> 
相關問題