2011-07-27 61 views
2

我想要X個log4j appender,一個用於文件中的消息級別,以及所有在控制檯中的打印。但我沒有得到。LOG4J:根據消息級別的一個appender

我的實際log4j.properties:

log4j.rootLogger=ALL, CONSOLA 

log4j.appender.CONSOLA=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLA.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLA.layout.ConversionPattern=%-4r %d %-5p %c - %m%n 

log4j.appender.WARNLOG=org.apache.log4j.FileAppender 
log4j.appender.WARNLOG.threshold=WARN 
log4j.appender.WARNLOG.file=XX/web/WEB-INF/serverlogs/warn-server.log 
log4j.appender.WARNLOG.layout=org.apache.log4j.PatternLayout 
log4j.appender.WARNLOG.layout.ConversionPattern=%-4r %d %-5p %c - %m%n 
log4j.appender.WARNLOG.append=true 
log4j.appender.WARNLOG.MaxFileSize=250KB 
log4j.appender.WARNLOG.MaxBackupIndex=backup 

log4j.appender.FATALLOG=org.apache.log4j.FileAppender 
log4j.appender.FATALLOG.threshold=FATAL 
log4j.appender.FATALLOG.file=XX/web/WEB-INF/serverlogs/fatal-server.log 
log4j.appender.FATALLOG.layout=org.apache.log4j.PatternLayout 
log4j.appender.FATALLOG.layout.ConversionPattern=%-4r %d %-5p %c - %m%n 
log4j.appender.FATALLOG.append=true 
log4j.appender.FATALLOG.MaxFileSize=250KB 
log4j.appender.FATALLOG.MaxBackupIndex=backup 

log4j.logger.com.XX=WARN, WARNLOG 
log4j.logger.com.XX=FATAL, FATALLOG 

解決:

我用LevelRangeFilter

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-4r %d %-5p %c - %m%n"/> 
     </layout> 
    </appender> 

    <appender name="FATALLOG" class="org.apache.log4j.FileAppender"> 
     <param name="File" value="xx/web/WEB-INF/serverlogs/fatal-server.log"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-4r %d %-5p %c - %m%n"/> 
     </layout> 
     <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
      <param name="LevelMax" value="FATAL"/> 
      <param name="LevelMin" value="FATAL"/> 
      <param name="AcceptOnMatch" value="true"/> 
     </filter> 
    </appender> 

    <appender name="WARNLOG" class="org.apache.log4j.FileAppender"> 
     <param name="File" value="xx/web/WEB-INF/serverlogs/warn-server.log"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-4r %d %-5p %c - %m%n"/> 
     </layout> 
     <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
      <param name="LevelMax" value="WARN"/> 
      <param name="LevelMin" value="WARN"/> 
      <param name="AcceptOnMatch" value="true"/> 
     </filter> 
    </appender> 

    <logger name="com.xx"> 
     <appender-ref ref="CONSOLE" /> 
     <appender-ref ref="FATALLOG" /> 
     <appender-ref ref="WARNLOG" /> 
    </logger> 

</log4j:configuration> 
+0

做什麼你做派WARN +誤差+致命WARNLOG,而您只需要WARN?或者它不會寫入任何其他日誌? (我知道你可以通過使用'log4j.rootLogger = ALL,CONSOLA,WARNLOG,FATALLOG'來獲得以前的行爲,但我意識到這可能不是你所需要的。) – dbreaux

回答

1

您必須有不同的記錄器或使用LevelMatchFilter。

欲瞭解更多信息,你可以搜索到完整的Log4j手冊。

你可以發現它herehere

+0

嗨,再次感謝,瞭解LevelMatchFilter我看到** LevelRangeFilter **更好的問題,我也看到比屬性文件更好的xml。感謝所有。 – Dani

+0

+1爲手動鏈接;每次我擡頭看Log4J時,當我只想要一塊信息時,我發現了購買該書的鏈接。 – 101100