2012-10-22 48 views
2

我想將我整個應用程序的所有日誌細節存儲在兩個不同的文件中。 對於例如:一個文件將包含所有調試信息和其他將只提供錯誤使用rootLogger的Log4j多個日誌文件

我目前的log4j.properties文件看起來像這樣

log4j.rootLogger=DEBUG, file1 
#Log Message in debug.log file 
log4j.appender.file1=org.apache.log4j.FileAppender 
log4j.appender.file1.File=log/debug.log 
log4j.appender.file1.layout=org.apache.log4j.PatternLayout 
log4j.appender.file1.layout.ConversionPattern=%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n 

log4j.rootLogger=ERROR, file2 
#Log Message in error.log file 
log4j.appender.file2=org.apache.log4j.FileAppender 
log4j.appender.file2.File=log/error.log 
log4j.appender.file2.layout=org.apache.log4j.PatternLayout 
log4j.appender.file2.layout.ConversionPattern=%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n 

但這只是更新error.log文件(任意文件上次提到)

,我所遇到到現在最好的解決辦法是使用

log4j.logger.OTHER_LOGGER=DEBUG, file2 
log4j.additivity.OTHER_LOGGER = false 
#File Appender 
log4j.appender.file2=org.apache.log4j.FileAppender 
log4j.appender.file2.File=log/admin.log 
log4j.appender.file2.layout=org.apache.log4j.PatternLayout 
log4j.appender.file2.append=false 
log4j.appender.file2.layout.ConversionPattern=%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n 

,並使用

private static final Logger logger = LoggerFactory.getLogger("OTHER_LOGGER"); 

但在使用這個問題是當日志被更新爲顯示像

0 22 Oct 2012 20:38:50 [main] INFO OTHER_LOGGER - testclass 

現在這裏,而不是提從哪裏日誌中報告類,它說OTHER_LOGGER

因此,最好的方法去使用它將使用兩個rootLooger的,但不知何故它不允許它

任何人都可以請幫我嗎?

回答

1

同樣,這是LevelMatchFilter的好工作。只需使用LevelMatchFilter屬性LevelToMatch = ERROR作爲appender「file2」。

您應該使用XML配置,因爲過濾器不受屬性配置的支持。在這裏,我試圖編寫您需要的XML配置:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="file1" class="org.apache.log4j.FileAppender"> 
      <param name="File" value="log/debug.log"/> 
      <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" value="%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n"/> 
      </layout> 
    </appender> 

    <appender name="file2" class="org.apache.log4j.FileAppender"> 
      <param name="File" value="log/error.log"/> 
      <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" value="%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n"/> 
      </layout> 

      <!-- Use LevelMatchFilter to write only ERROR messages to error.log --> 
      <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
        <param name="LevelToMatch" value="error" /> 
        <param name="AcceptOnMatch" value="true"/> 
      </filter> 
      <filter class="org.apache.log4j.varia.DenyAllFilter" /> 
    </appender> 

    <root> 
      <level value="debug"/> 
      <appender-ref ref="file1" /> 
      <appender-ref ref="file2" /> 
    </root> 
</log4j:configuration> 
+0

thnks。雖然我不得不使用XML,但我認爲這應該可以做到。 請問您是否可以將上述屬性文件轉換爲XML,我不是很熟悉 再次感謝 – Sumit

+0

您是否想要將所有或僅具有DEBUG級別的消息寫入log/debug.log? –