2016-04-25 86 views
2

我使用log4j的2.我試圖確定爲什麼我的日誌文件不被寫入,但我的控制檯。這是輸出我到控制檯:log4j的2:日誌文件被創建,但未被寫入

2016-04-25 12:26:07,142 INFO [main] helperCode.LogPlus (LogPlus.java:50) - 
---------------------------------------------------------------------------- 
------------ The test is starting now at 2016-04-25-12-26-07-135 ----------- 
---------------------------------------------------------------------------- 

2016-04-25 12:26:07,151 INFO [main] helperCode.LogPlus (LogPlus.java:50) - 
-------------------------------------------------------------------------- 
------------ METHOD loginBadPasswordGoodUsername_3 starting: ------------ 
-------------------------------------------------------------------------- 

我已經考慮的問題:

  • 的輸出是不能重演,所以被重定向日誌輸出是不是一個問題。
  • 我沒有在我的項目中的任何地方使用java.util.logging.Logger;
  • 日誌文件的輸出格式爲log4j風格,而不是JUL風格,所以我知道JUL不會覆蓋它;

這裏是我的XML配置文件:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Appenders> 
     <File name="FileLogger" fileName="${sys:logFilePath}" append="false"> 
      <PatternLayout pattern="%d %t %-5p %c{2} - %m%n" /> 
     </File> 
     <Async name="Async"> 
      <AppenderRef ref="FileLogger" /> 
     </Async> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="automationFramework" level="trace"> 
      <AppenderRef ref="FileLogger" /> 
     </Logger> 
     <Root level="trace"> 
      <AppenderRef ref="STDOUT" /> 
     </Root> 
    </Loggers> 
</Configuration> 

我指揮輸出到位於系統變量「LOGFILEPATH」的文件。

我不知道是怎麼回事,和類似的問題的答案顯示的配置文件不是XML格式的,所以我不知道如何來來回回的配置文件代碼XML。

+0

告訴我們你是如何配置,在代碼...和你是如何實現的記錄.... –

+0

你的包名automationFramework(用於Java類項目)? – Unknown

+0

其實,未知,ΦXoce和웃Пpepúpa,我想我只是想通了。正如你所建議的,Unknown,調用被執行的包被命名爲不同。我將log4j 2配置文件中的軟件包名稱更改爲該軟件包,並修復了這些問題。感謝你們兩位! –

回答

1

在你的情況下,在評論中提及你沒有叫applicatiionFramework包。因此,請根據要記錄日誌事件的類的包名稱更改名稱屬性。

<Logger name="your package" level="trace"> 
       <AppenderRef ref="FileLogger" /> 
     <Root level="trace"> 
      <AppenderRef ref="STDOUT" /> 
     </Root> 
</Logger> 

欲瞭解更多信息,請訪問log4j-manual-configuration

0

很高興對方的回答幫助。你需要命名記錄器嗎?爲什麼不只有根記錄器?此外,你宣佈一個異步Appender,但沒有使用它。這是故意的嗎?這是我建議:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Appenders> 
     <File name="FileLogger" fileName="${sys:logFilePath}" append="false"> 
      <PatternLayout pattern="%d %t %-5p %c{2} - %m%n" /> 
     </File> 
     <Async name="Async"> 
      <AppenderRef ref="FileLogger" /> 
     </Async> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Root level="trace"> 
      <AppenderRef ref="STDOUT" level="info" /> 
      <AppenderRef ref="Async" /> 
     </Root> 
    </Loggers> 
</Configuration> 

請注意,您還可以指定AppenderRef上的一個級別。我使用Console Appender level INFO來說明這一點。

如果你想在日誌中顯示的位置信息,並使用異步記錄儀或追加程序,那麼你需要在異步追加程序指定includeLocation="true"

+1

嘿Remko,是的,我只想記錄一個包中的信息,但很高興知道這個限制可以被刪除。 –

0

有關完整的小白,像我這樣的,這條線在未知的答案以上:

<Logger name="your package" level="trace"> 

是關鍵。當它顯示「你的包裝」時,它確實意味着你在創建記錄器的.java文件頂部聲明的「包裝foo.bar」,而不是你爲創建記錄器而傳遞的類別名稱,如:

LOGGER = LogManager.getLogger(MyClass.class.getName()); 

今天我花了一段可笑的量,讓我log4j2輸出去一個文件,用各種「名」的價值觀玩到燈泡繼續。