一:測試環境與log4j(一)——爲何要使用log4j?同樣,這裏再也不重述html
二:老規矩,先來個栗子,而後再聊聊感覺java
(1)這裏栗子有一點特別呀!給出了包名唉!想必有用,是的,配置文件中要特別說明一下的apache
package test.log4j.test8; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; /** * Created by godtrue */ public class UseLog4j { //日誌記錄器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口——主函數 public static void main(String[]args) { //讀取使用Java的特性文件編寫的配置文件 DOMConfigurator.configure( "D:\\workspace_test\\hello-log4j\\log4j.xml" ); //輸出日誌信息,測試日誌級別的做用(配置在配置文件中),僅僅輸出大於等於目前有效級別的日誌信息 LOGGER.debug("[1]-my level is DEBUG 天"); LOGGER.info("[2]-my level is INFO"); LOGGER.warn("[3]-my level is WARN"); LOGGER.error("[4]-my level is ERROR"); } }
(2)這段代碼和(1)除了類名多了一個 _ ,並無什麼區別,那有什麼用那?恩,有用的,一切爲了測試,不信,你本身試試就更清楚了編程
package test.log4j.test8; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; /** * Created by godtrue */ public class UseLog4j_ { //日誌記錄器 private static Logger LOGGER = LogManager.getLogger(UseLog4j_.class); //程序入口——主函數 public static void main(String[]args) { //讀取使用Java的特性文件編寫的配置文件 DOMConfigurator.configure( "D:\\workspace_test\\hello-log4j\\log4j.xml" ); //輸出日誌信息,測試日誌級別的做用(配置在配置文件中),僅僅輸出大於等於目前有效級別的日誌信息 LOGGER.debug("[1]-my level is DEBUG 天"); LOGGER.info("[2]-my level is INFO"); LOGGER.warn("[3]-my level is WARN"); LOGGER.error("[4]-my level is ERROR"); } }
(3)以下的配置文件,僅列出了三種文件輸出目的地的配置,他們相對比較經常使用,其中值得特別注意的是記錄器的 name 和 additivity 這兩個屬性的做用,詳情往下看註解,最好本身試試app
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <!-- 將日誌信息輸出到控制檯 --> <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <!-- 設置日誌輸出的樣式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 設置日誌輸出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> <!--過濾器設置輸出的級別--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 設置日誌輸出的最小級別 --> <param name="levelMin" value="WARN" /> <!-- 設置日誌輸出的最大級別 --> <param name="levelMax" value="ERROR" /> <!-- 設置日誌輸出的xxx,默認是false --> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <!-- 將日誌信息輸出到文件,可是當文件的大小達到某個閾值的時候,日誌文件會自動回滾 --> <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender"> <!-- 設置日誌信息輸出文件全路徑名 --> <param name="File" value="D:/log4j/RollingFileAppender.log" /> <!-- 設置是否在從新啓動服務時,在原有日誌的基礎添加新日誌 --> <param name="Append" value="true" /> <!-- 設置保存備份回滾日誌的最大個數 --> <param name="MaxBackupIndex" value="10" /> <!-- 設置當日志文件達到此閾值的時候自動回滾,單位能夠是KB,MB,GB,默認單位是KB --> <param name="MaxFileSize" value="10KB" /> <!-- 設置日誌輸出的樣式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 設置日誌輸出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> </appender> <!-- 將日誌信息輸出到文件,能夠配置多久產生一個新的日誌信息文件 --> <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender"> <!-- 設置日誌信息輸出文件全路徑名 --> <param name="File" value="D:/log4j/DailyRollingFileAppender.log" /> <!-- 設置日誌每分鐘回滾一次,即產生一個新的日誌文件 --> <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" /> <!-- 設置日誌輸出的樣式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 設置日誌輸出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> </appender> <!-- 注意: 1:當additivity="false"時,root中的配置就失靈了,不遵循缺省的繼承機制 2:logger中的name很是重要,它表明記錄器的包的形式,有必定的包含關係,試驗代表 2-1:當定義的logger的name同名時,只有最後的那一個才能正確的打印日誌 2-2:當對應的logger含有包含關係時,好比:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j,則2-1的狀況是同樣的
2-3:logger的name表示全部的包含在此名的全部記錄器都遵循一樣的配置,name的值中的包含關係是指記錄器的名稱喲!注意啦! 3:logger中定義的level和appender中的filter定義的level的區間取交集 4:若是appender中的filter定義的 levelMin > levelMax ,則打印不出日誌信息 --> <!-- 指定logger的設置,additivity指示是否遵循缺省的繼承機制--> <logger name="test.log4j.test8.UseLog4j" additivity="false"> <level value ="WARN"/> <appender-ref ref="DailyRollingFileAppender"/> </logger> <!--指定logger的設置,additivity指示是否遵循缺省的繼承機制 --> <logger name="test.log4j.test8.UseLog4j_" additivity="false"> <level value ="ERROR"/> <appender-ref ref="RollingFileAppender"/> </logger> <!-- 根logger的設置--> <root> <level value ="INFO"/> <appender-ref ref="ConsoleAppender"/> <!--<appender-ref ref="DailyRollingFileAppender"/>--> </root> </log4j:configuration>
三:感覺框架
1)咱們如今實際的項目使用的是log4j2,相應的配置方式和這裏有所不一樣,抽時間我再好好玩一下函數
2)若是整個log4j日誌框架,按照比較平滑的學習曲線來學習的話,仍是很是簡單的,之前學習過,不過不作筆記就是學習一下,時間一長容易忘記各項配置都是幹啥的,因此,在裏再補上一筆,寫博客的好處就體現出來了,等忘記了回頭再看看,也許記憶就恢復了,謝謝博客園提供的遊戲場所。——世界是個遊樂場,咱們都是上帝的孩子。post
3)編程這一行,我以爲應該重複的造輪子,特別是在學習某項技術的時候,網上關於log4j的博文也挺多的,剛開始我也找了一些來看,不過發現很差玩,不是本身的東西理解起來費勁不說,好多一實驗還不靈,固然,有好多也是至關不錯的,是通過試驗的,不過不夠詳細。總之,好的要學習,而學習的最好途徑仍是本身多思考,多動手試驗試驗。學習
四:寫這些博客我曾詳細的看過一下資源(很是感謝,在此謝過!)測試