2014-10-30 106 views
0

所以我一直試圖在JBoss EAP 6.1的耳朵應用程序中使用自定義log4j.xml。我發現,如果我使用文件appender和直接的靜態文件名,它會按照我的預期登錄到該文件(在這種情況下,在我的war中使用log4j2.xml,但如果使用log4j.xml,它也會執行相同的操作與log4j的1.2):jboss eap 6.1自定義log4j到server.log

<?xml version="1.0" encoding="UTF-8" ?> 
<Configuration status="debug"> 
    <Appenders> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
    </Console> 
    <File name="A1" fileName="server.log"> 
     <PatternLayout pattern="%t %-5p %c{2} - %m%n" /> 
    </File> 
    </Appenders> 
    <Loggers> 
    <Logger name="com.xxx.yyy" level="debug" additivity="false"> 
     <AppenderRef ref="A1" /> 
    </Logger> 
    </Loggers> 
</Configuration> 

但是,這將導致它記錄到[JBoss的-EAP] /bin/server.log。我可以把替換變量把它指向JBoss的日誌目錄下的文件(在EAP的情況下,[的jboss-EAP] /standalone/log/test.log):

<?xml version="1.0" encoding="UTF-8" ?> 
<Configuration status="debug"> 
    <Appenders> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
    </Console> 
    <File name="A1" fileName="${sys:jboss.server.log.dir}/test.log"> 
     <PatternLayout pattern="%t %-5p %c{2} - %m%n" /> 
    </File> 
    </Appenders> 
    <Loggers> 
    <Logger name="com.xxx.yyy" level="debug" additivity="false"> 
     <AppenderRef ref="A1" /> 
    </Logger> 
    </Loggers> 
</Configuration> 

,我可以看到,它正在替換我:

16:16:28,626 INFO [stdout] (ServerService Thread Pool -- 71) 2014-10-30 16:16:28,626 
DEBUG Starting FileManager C:\Users\xxxxxx\Apps\jbossdevstudio\runtimes\jboss- 
eap\standalone\log/test.log 

輸出將實際顯示在test.log中。但我真正想要的只是將日誌記錄到標準的server.log中。如果我嘗試上面的替換,但使用server.log而不是test.log,則實際上沒有記錄。我嘗試過的另一件事是使用控制檯的appender,但後來我得到的日誌時間戳兩次,並有兩個日誌級別指標很長的輸出線:

16:24:08,038 INFO [stdout] (http-/0.0.0.0:8080-1) 2014-10-30 16:24:08,036 INFO 
    [http-/0.0.0.0:8080-1] com.xxx.TestServlet (TestServlet.java:25) - This is a test 

當我真正想要的只是:

2014-10-30 16:24:08,036 INFO [http-/0.0.0.0:8080-1] com.xxx.TestServlet 
    (TestServlet.java:25) - This is a test 

所以我不知道如何做到這一點。我們可以配置jboss內部日誌記錄配置,但在我們的組織中,在服務器中更改這些內容涉及我們的中間件團隊,如果需要調整某些類的日誌級別,我們寧願更改自定義log4j.xml。如果需要,我們可以使用更長的輸出,但我們也使用Splunk,並且我認爲它會在stdout輸出的日誌級別上感到困惑,而不是在嘗試按日誌級別過濾日誌時實際記錄的內容。

我會很感激任何意見,人們有。

回答

1

我不會建議讓appender寫入服務器寫入的同一個文件。你可能會以意想不到的行爲結束。我也不建議使用ConsoleAppender,因爲System.outSystem.err被封裝,並且如您所見,所有消息均在INFO級別指定。

最好的選擇是不包含日誌記錄配置並使用服務器日誌記錄配置。您擁有的主要優勢是無需重新部署應用程序,甚至無需重新啓動服務器即可進行大部分更改。它們可以在運行時發生。正如你對你說的那樣可能是一種痛苦。

如果您需要繼續包含log4j配置文件,最好的選擇是寫入不同的文件,而不是寫入控制檯。