-Intelj13
-log4j1.2.17
範例實作
1.匯入lo4j jar檔
2.建立log4j.xml 設定檔
- 設定檔名稱『一定要叫log4j』,否則系統會抓取不到
- 開頭前2行做為log4j設定檔的宣告
- 所有設定放在log4j:configuration中
- 放在專案src下方
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <!--宣告log4j.xml的文件型別定義(Document Type Definition, DTD)--> <!--所有log4j的設定都必須放在 <log4j:configuration>...</log4j:configuration>之內 --> <log4j:configuration> </log4j:configuration>
3.Log要輸出到哪裡??要長甚麼樣子??,appender設定
(放在log4j:configuration中)
- Append 定義 log message 『輸出的裝置』及 『log 內容格式』
- log4j.xml 可以設定多個append
<appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <!-- 設定appender的layout為PatternLayout --> <!-- 設定layout的pattern,參數名為conversionPattern,value為想要的輸出格式 --> <param name="conversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%C{5}]-[%p] %m%n"/> </layout> </appender>
<!-- DailyRollingFileAppender的第一個log檔並不會加上DatePattern的樣式, 必須在下一次週期產生的log檔才會加上DatePattern的樣式。 所以基本上當天產生的log檔算是第一次的log檔,並不會加上Pattern樣式--> <appender name="File" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="D:\system_notice.txt" /> <!--檔案路徑--> <!--DatePattern是DailyRollingFileAppender的一個重要參數,用來設定檔案輸出的週期--> <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%C{5}]-[%p] %m%n" /> </layout> </appender>4.檔案與Log設定的配對(本範例有三種) logger設定(放在log4j:configuration中)
- 補充-概念等於希望把log印出至console也要同時輸出至檔案
<appender-ref ref="Console"/> <appender-ref ref="File"/>- 全專案套用
- 某個資料夾全部套用
- 指定要使用哪個Logger
<!--RootLogger(全專案套用)--> <!--rootLogger的LEVEL設定為DEBUG,DEBUG以上等級的資訊也都會寫出--> <!--主要class搭配:public static Logger logger = Logger.getLogger(MyPractice.class);--> <root> <priority value="DEBUG"/> <!--印出INFO以上的資訊--> <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender--> <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender--> </root>
<!--整個資料夾套用--> <!--main class搭配:public static Logger logger = Logger.getLogger("MyPractice.class");--> <logger name="MyTest"> <!--指定的資料夾--> <level value="ERROR"/> <!--印出ERROR以上的資訊--> <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender--> <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender--> </logger>
<!--指定要哪個Logger設定--> <!--class搭配:public static Logger logger = Logger.getLogger("aa");--> <logger name="aa"> //替logger取名稱 <level value="INFO"/> <!--印出INFO以上的資訊--> <appender-ref ref="Console"/> <!--將rootLogger的appender參考至剛設定好的Console appender--> <appender-ref ref="File"/> <!--將rootLogger的appender參考至剛設定好的File appender--> </logger>5.Java檔實際執行記錄
public class MyPractice{ public static Logger logger = Logger.getLogger(MyPractice.class); public static Logger logger2 = Logger.getLogger("aa"); public static void main(String[] args) { int num = 0; try { System.out.println(num/0); } catch (Exception e) { System.out.println(e); logger.debug("Here is some DEBUG"); logger.info("Here is some INFO"); logger.warn("Here is some WARN"); logger.error("Here is some ERROR"); logger.fatal("Here is some FATAL"); logger2.debug("Here is some aa logger"); logger2.info("Here is some aa logger"); } } }
沒有留言:
張貼留言