環境
-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");
}
}
}