簡體   English   中英

Log4j 2不寫入文件

[英]Log4j 2 doesn't write to file

擁有以下配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{HH:mm:ss.SSS} %-5level] %logger{36} - %msg%n"/>
        </Console>
        <File name="File" fileName="error.log">
            <PatternLayout pattern="[%d{ISO8601} %-5level] %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="errors" level="error">
            <AppenderRef ref="File"/>
        </Logger>
        <Root level="all">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

僅將(全部)日志記錄輸出寫入控制台。 然而,我有意將error寫入error的文件寫入名為error.log的文件,格式略有不同。 但是,運行我的應用程序會導致所有內容都被寫入控制台,而后面會留下一個空文件(它被創建,只是沒有填充)。

不知何故,似乎Root記錄器捕獲了所有東西,因為我也試過這個:

<Logger name="errors" level="error">
    <AppenderRef ref="Console"/>
</Logger>

這不會記錄兩次。 我真的沒有想法,我甚至從文檔中復制了一個例子( 樣本#2來自這里 ),並且還留下了一個空文件。

是的,根記錄器級別為ALL,因此它將接收所有事件。 一種選擇是這樣做:

<Loggers>
  <Root level="all">
    <AppenderRef ref="Console" level="trace" />
    <AppenderRef ref="File" level="error" />
  </Root>
</Loggers>

這樣您只需要一個記錄器,因此您不必擔心可加性,並且在代碼中您只需編寫LogManager.getLogger(MyClass.class)來獲取Logger實例。 (如果使用命名的Logger,則需要在代碼中使用logger名稱: LogManager.getLogger("error") 。)

啊,我是傻瓜。 屬性name似乎是類將使用該記錄器的過濾器。 name更改為我的頂級包解決了該問題。

在進程完成之前,Log4J2不會寫入文件。 默認情況下,每次調用記錄器時都不刷新緩沖區。 例如,

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

不會立即登錄到該文件。 將immediateFlush的值更改為true以強制緩沖區在每次調用logger時刷新。

嘗試這樣的事情。

這里Target是值得注意的重要屬性。

控制台appender定義了一個param元素。 查看ConsoleAppender的javadoc,setTarget方法用於選擇要將消息打印到System.out或System.err的控制台流。 該示例將appender配置為使用System.out。

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>

</log4j:configuration>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM