2009-11-10 27 views
0

我如何能實現以下使用log4j的剪裁下來的日誌輸出:使用log4j的

  • 日誌僅事件從一個特定類別的到來,即com.example.app但不com.example.app.contextcom.example.dao;
  • 記錄級別爲WARN或更高的所有事件。

回答

2

您需要設置catergory過濾器,將appender閾值設置爲higer過濾器限制。

<appender name="LOG_FILE" class="org.apache.log4j.FileAppender"> 
     <param name="File" value="log_file.log" /> 
     <param name="Threshold" value="WARN"/> 

     <layout class="org.apache.log4j.PatternLayout"> 
     <!-- The default pattern: Date Priority [Category] Message\n --> 
     <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/> 
     </layout> 
    </appender> 

    <category name="com.example.app"> 
     <priority value="DEBUG" /> 
     <appender-ref ref="LOG_FILE" /> 
    </category> 

    <category name="com.example.app.context"> 
     <priority value="WARN" /> 
     <appender-ref ref="LOG_FILE" /> 
    </category> 
+1

我認爲要獲取所要求的海報行爲,您需要將com.example.app設置爲WARN並將com.example.app.context設置爲OFF。我不認爲有一種方法可以在每個com.example.app。* off上關閉com.example.app,除非明確重複每個子包。 – 2009-11-10 21:21:12

+0

要關閉子包(到比父級更低的級別,還必須將添加劑設置爲false)。 – Yishai 2009-11-10 21:24:03

+0

感謝您的回答。但是,我這樣就會失去'com.example.app.context'文件中的WARN'日誌記錄,我想查看它。 – 2009-11-11 11:35:45

2

在你的log4j.properties文件,你可以設置全局日誌級別有關rootLogger您的應用程序:

log4j.rootLogger=DEBUG, APPENDER 

您可以使用WARN,INFO,ERROR和FATAL,而不是DEBUG。

與子包一個包可以給自己的日誌級別,像這樣:

log4j.logger.com.example.app=DEBUG 

從其子包刪除記錄,設置其日誌級別的錯誤或致命的:

#log4j.logger.com.example.app.context=ERROR 
log4j.logger.com.example.app.dao=ERROR 

編輯:註釋掉app.context行,以便它從其父包中繼承DEBUG級別。

+0

感謝您的回答。然而,我這樣就會失去'com.example.app.context'文件中的<'ERROR'日誌記錄,我想查看 – 2009-11-11 11:36:16

+0

如果您希望'app.context'繼承'app'的日誌級別,只是不要在屬性文件中爲'app.context'放置一個新的日誌級別。你能編輯你的問題,並詳細闡述一下你想要的東西嗎? – rsp 2009-11-11 14:47:46