2016年10月18日 星期二

Log4j Java 使用xml設定檔

環境
-Intelj13
-log4j1.2.17

範例實作
1.匯入lo4j jar檔







2.建立log4j.xml 設定檔
- 設定檔名稱『一定要叫log4j』,否則系統會抓取不到
- 開頭前2行做為log4j設定檔的宣告
- 所有設定放在log4j:configuration中
- 放在專案src下方









  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <!--宣告log4j.xml的文件型別定義(Document Type Definition, DTD)-->
  3.  
  4. <!--所有log4j的設定都必須放在 <log4j:configuration>...</log4j:configuration>之內 -->
  5. <log4j:configuration>
  6. </log4j:configuration>

3.Log要輸出到哪裡??要長甚麼樣子??,appender設定
(放在
log4j:configuration中)

- Append 定義 log message 『輸出的裝置』及 『log 內容格式』
- log4j.xml 可以設定多個append
  1. <appender name="Console" class="org.apache.log4j.ConsoleAppender">
  2. <layout class="org.apache.log4j.PatternLayout"> <!-- 設定appender的layout為PatternLayout -->
  3. <!-- 設定layout的pattern,參數名為conversionPattern,value為想要的輸出格式 -->
  4. <param name="conversionPattern"
  5. value="%-d{yyyy-MM-dd HH:mm:ss} [%C{5}]-[%p] %m%n"/>
  6. </layout>
  7. </appender>
  1. <!-- DailyRollingFileAppender的第一個log檔並不會加上DatePattern的樣式,
  2. 必須在下一次週期產生的log檔才會加上DatePattern的樣式。
  3. 所以基本上當天產生的log檔算是第一次的log檔,並不會加上Pattern樣式-->
  4.  
  5. <appender name="File" class="org.apache.log4j.DailyRollingFileAppender">
  6. <param name="File" value="D:\system_notice.txt" /> <!--檔案路徑-->
  7. <!--DatePattern是DailyRollingFileAppender的一個重要參數,用來設定檔案輸出的週期-->
  8. <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
  9. <layout class="org.apache.log4j.PatternLayout">
  10. <param name="ConversionPattern"
  11. value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%C{5}]-[%p] %m%n" />
  12. </layout>
  13. </appender>
4.檔案與Log設定的配對(本範例有三種) logger設定(放在log4j:configuration中)
- 補充-概念等於希望把log印出至console也要同時輸出至檔案
  1. <appender-ref ref="Console"/>
  2. <appender-ref ref="File"/>
- 全專案套用
- 某個資料夾全部套用
- 指定要使用哪個Logger
  1. <!--RootLogger(全專案套用)-->
  2. <!--rootLogger的LEVEL設定為DEBUG,DEBUG以上等級的資訊也都會寫出-->
  3. <!--主要class搭配:public static Logger logger = Logger.getLogger(MyPractice.class);-->
  4. <root>
  5. <priority value="DEBUG"/> <!--印出INFO以上的資訊-->
  6. <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender-->
  7. <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender-->
  8. </root>
  1. <!--整個資料夾套用-->
  2. <!--main class搭配:public static Logger logger = Logger.getLogger("MyPractice.class");-->
  3. <logger name="MyTest"> <!--指定的資料夾-->
  4. <level value="ERROR"/> <!--印出ERROR以上的資訊-->
  5. <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender-->
  6. <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender-->
  7. </logger>
  1. <!--指定要哪個Logger設定-->
  2. <!--class搭配:public static Logger logger = Logger.getLogger("aa");-->
  3. <logger name="aa"> //替logger取名稱
  4. <level value="INFO"/> <!--印出INFO以上的資訊-->
  5. <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender-->
  6. <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender-->
  7. </logger>
5.Java檔實際執行記錄
  1. public class MyPractice{
  2. public static Logger logger = Logger.getLogger(MyPractice.class);
  3. public static Logger logger2 = Logger.getLogger("aa");
  4. public static void main(String[] args) {
  5. int num = 0;
  6. try {
  7. System.out.println(num/0);
  8. } catch (Exception e) {
  9. System.out.println(e);
  10. logger.debug("Here is some DEBUG");
  11. logger.info("Here is some INFO");
  12. logger.warn("Here is some WARN");
  13. logger.error("Here is some ERROR");
  14. logger.fatal("Here is some FATAL");
  15. logger2.debug("Here is some aa logger");
  16. logger2.info("Here is some aa logger");
  17. }
  18. }
  19. }

沒有留言:

張貼留言