很少學東西 總感受生活要對我這隻貓咪下手 方方滴~html
今天準備整理【摘抄】下log4j相應的知識java
摘抄自:http://www.javashuo.com/article/p-pngknoob-cb.htmlapache
<?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>
注意:app
一、Log4j提供的appender有如下幾種:測試
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
二、spa
1)根節點configuration,而後有兩個子節點:appenders和loggers(都是複數,意思就是能夠定義不少個appender和logger了)線程
2)appenders:這個下面定義的是各個appender,就是輸出了,有好多類別,好比Console,這些節點可不是隨便命名的,Console就是輸出控制檯的意思。而後就針對這個輸出設置一些屬性,這裏設置了PatternLayout就是輸出格式了,基本上是前面時間,線程,級別,logger名稱,log信息等,差很少,下面有說明。debug
3)loggers下面會定義許多個logger,這些logger經過name進行區分,來對不一樣的logger配置不一樣的輸出,方法是經過引用上面定義的logger,注意,appender-ref引用的值是上面每一個appender的name,而不是節點名稱。調試
logger的name,是有繼承功能的,好比 若是你給cn.base定義了一個logger,那麼他也適用於cn.base.lgo4j這個logger。名稱的繼承是經過點(.)分隔的。日誌
additivity(默認是true)。
<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <!--先定義全部的appender--> <appenders> <!--這個輸出控制檯的配置--> <Console name="Console" target="SYSTEM_OUT"> <!--控制檯只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)--> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <!--這個都知道是輸出日誌的格式--> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <!--文件會打印出全部信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用--> <File name="log" fileName="log/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!--這個會打印出全部的信息,每次大小超過size,則這size大小的日誌會自動存入按年份-月份創建的文件夾下面並進行壓縮,做爲存檔--> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="50MB"/> </RollingFile> </appenders> <!--而後定義logger,只有定義了logger並引入的appender,appender纔會生效--> <loggers> <!--創建一個默認的root的logger--> <root level="trace"> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> </root> </loggers> </configuration>
三、日誌級別從高到低分爲:
A:off 最高等級,用於關閉全部日誌記錄。
B:fatal 指出每一個嚴重的錯誤事件將會致使應用程序的退出。
C:error 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
D:warm 代表會出現潛在的錯誤情形。
E:info 通常和在粗粒度級別上,強調應用程序的運行全程。
F:debug 通常用於細粒度級別上,對調試應用程序很是有幫助。
G:all 最低等級,用於打開全部日誌記錄。
通常開發環境用DEBUG,正式環境用INFO便可~~~
# %m 輸出代碼中指定的消息 # %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL # %r 輸出自應用啓動到輸出該log信息耗費的毫秒數 # %c 輸出所屬的類目,一般就是所在類的全名 # %t 輸出產生該日誌事件的線程名 # %n 輸出一個回車換行符,Windows平臺爲「rn」,Unix平臺爲「n」 # %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyyy MMM dd HH:mm:ss,SSS},輸出相似:2002年10月18日 22:10:28,921 # %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。