2015-12-21 119 views
1

我在我的應用程序中使用Log4j2,它似乎加載和初始化罰款。 控制檯登錄後,2個指定的文件appender創建它們各自的文件,但這些文件保持空白!Log4j2不記錄到文件

我的配置有問題嗎?我是否以錯誤的方式啓動Log4j2?

這裏的配置:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="TRACE"> 
    <Appenders> 
     <File name="file" fileName="${sys:logdir}ftm.log"> 
      <PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
     <File name="file_error" fileName="${sys:logdir}ftm_error.log"> 
      <PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Root level="ALL"> 
      <AppenderRef ref="file" level="ALL"/> 
      <AppenderRef ref="STDOUT" level="ALL"/> 
     </Root> 
     <Logger name="FTM" level="ALL" additivity="true"> 
      <AppenderRef ref="file_error" level="ERROR"/> 
     </Logger> 
    </Loggers> 
</Configuration> 

而這裏的代碼:

LoggerContext contextLogging = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); 

File file = new File("log4j2.xml"); 
if (file != null && file.isFile() && file.canRead()){ 
    contextLogging.setConfigLocation(file.toURI()); 
} 

我開始在不同的點在整個初始化位後的應用程序登錄。

回答

-1

也許LOG4J2正在緩衝你的日誌消息,並會在稍後寫入它們。 你試過關閉你的應用服務器嗎? 這將強制任何緩衝的消息寫入文件。

+0

有沒有辦法可以強制這種行爲?因爲只是關閉應用程序不會觸發。 – Plsplsplsplsplspls

+0

不是我知道的,對不起。我在我的web應用程序中嘗試過你的XML配置,它對我來說很有用,它只是在我關閉Web應用程序之前才發生對文件的寫入。我的設置在幾個方面有所不同。我使用硬編碼文件路徑'/ usr/tmp/tmp.log'而不是使用'$ {sys:logdir} my.log'的變量。另外,我使用Spring爲我初始化Log4j2,所以我沒有配置的Java代碼。 –

+0

您可以檢查的另一件事是Log4j2文檔(http://logging.apache.org/log4j/2.x/manual/webapp.html)中有一節介紹了servlet 3.0和2. *的配置。他們稍有不同,所以仔細檢查一下。我希望有所幫助。 –

1

我懷疑你的調用獲取LoggerContext導致Log4j初始化。您應該看到一條消息,指出正在使用默認配置。爲什麼不使用Configurator.initialize()方法之一?