Log4j五個級別java
ALL > DEBUG > INFO > WARN > ERROR > FATAL > OFF
•Logger:負責供客戶端代碼調用。 (執行dubug(msg),info(msg),warn(msg),error(msg)等方法)web
•Appender:負責日誌輸出。(支持多種目標輸出:控制檯,文件,Socket等)apache
•Layout:負責日誌信息格式化服務器
logger是具備層級關係的,且層級關係是由其名字來指定多線程
--如:x.y 表示兩層,x層和y層,x是y的父層級,x.y所在層級是y層級app
語法定義: |-log4j.rootLogger = [ level ] , appenderName, appenderName...webapp
|- log4j.logger.logName = [ level ] , appenderName...(配置多個logger時用) |- || |- log4j.category.logName = [ level ] , appenderName...(配置多個logger時用) |- **logger是category的子類,category如今已經不提倡使用**。
log4j.additivity.logName = boolean (默認爲true)ide
|-false : 表示當前logger不須要打到父層級所指定的appender,只打到當前的appender
語法定義:log4j.appender.appenderName = appender類型佈局
appender類型:編碼
|-這三個屬性是全部appender都具有的 | |-Threshold=WARN :指定日誌消息的輸出最低層次。 | |-Encoding=utf-8 :輸出編碼格式 | |-ImmediateFlush=true :默認值是true,意謂着全部的消息都會被當即輸出 | |--控制檯 | ①org.apache.log4j.ConsoleAppender控制檯 | |-Target=System.out :默認狀況下是:System.out,指定輸出控制檯 |--文件: | |-File=mylog.txt:指定消息輸出到mylog.txt文件 | |-Append=false:默認值是true,即將消息增長到指定文件中,false指將消息覆蓋指定的文件內容 | ②org.apache.log4j.FileAppender | ③org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件) | |-DatePattern=''.''yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。 | 固然也能夠指定按月、周、天、時和分。即對應的格式以下: | 1)'.'yyyy-MM : 每個月 | 2)'.'yyyy-ww : 每週 | 3)'.'yyyy-MM-dd : 天天 | 4)'.'yyyy-MM-dd-a : 天天兩次 | 5)'.'yyyy-MM-dd-HH : 每小時 | 6)'.'yyyy-MM-dd-HH-mm : 每分鐘 | ④org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件) | |- MaxFileSize=100KB: 後綴能夠是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。 | |-MaxBackupIndex=2:指定能夠產生的滾動文件的最大數。 |--流: | ⑤org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
語法定義:log4j.appender.appenderName.layout = layout類型
layout類型:
|--①org.apache.log4j.HTMLLayout (以HTML表格形式佈局), | |-LocationInfo=true:默認值是false,輸出java文件名稱和行號 | |--②org.apache.log4j.PatternLayout (經常使用:能夠靈活地指定佈局模式) | |- ConversionPattern=%m%n :指定怎樣格式化指定的消息。 | |- -X號: X信息輸出時左對齊; | |- %p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL, 例:= | |- %d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601(2016-01-05 14:55:00,535),指定格式,:%d{yyy MMM dd HH:mm:ss,SSS},輸出相似:2002年10月18日 22:10:28,921 | |- %F: 輸出日誌消息產生時所在的文件名稱 | |- %c: 輸出日誌信息的類的全名路徑,若是加上{<層數>} : %c{1}表示列出從最內層算起的指定層數的名字空間 com.apache.log4j.testLog | |- %m: 輸出代碼中指定的消息,產生的日誌具體信息 | |- %n: 輸出一個回車換行符 | |- %t: 輸出產生該日誌事件的線程名 | |- %M 調用logger的方法名 | |- %l: 輸出日誌事件的發生位置,至關於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10) | |- %L: 輸出代碼中的行號 | |- %%: 輸出一個"%"字符 | |- %r: 輸出自應用啓動到輸出該log信息耗費的毫秒數 | |- %x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤爲用到像java servlets這樣的多客戶多線程的應用中 | |--③org.apache.log4j.SimpleLayout (包含日誌信息的級別和信息字符串) | |--④org.apache.log4j.TTCCLayout (包含日誌產生的時間、線程、類別等等信息)
一、日誌信息傳入 Logger。
二、將日誌信息封裝成 LoggingEvent 對象並傳入 Appender。
三、在 Appender 中調用 Filter 對日誌信息進行過濾,調用 Layout 對日誌信息進行格式化,而後輸出。
1:獲得Logger記錄器> 這裏輸入引用文本
private static Logger = Logger.getLogger(TestAction.class);
2:讀取配置文件(可省略)
BasicConfigurator.configure (): 自動快速地使用缺省Log4j環境。 PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。 DOMConfigurator.configure ( String filename ) :讀取XML形式的配置文件。
3:寫入log信息
logger.debug("test info");
log4j.logger.logger2=DEBUG, C log4j.additivity.logger2=false log4j.rootLogger=DEBUG, appenderName log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender log4j.appender.appenderName.DatePattern='.'yyyy-MM-dd log4j.appender.appenderName.File=/usr/local/logs/console-appenderName.log log4j.appender.appenderName.Append=true log4j.appender.appenderName.Encoding=utf-8 log4j.appender.appenderName.Threshold=DEBUG log4j.appender.appenderName.layout=org.apache.log4j.PatternLayout log4j.appender.appenderName.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS}, [%t:%c{1}], %-5p, %m%n
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- * 1. 一個appender子元素定義一個日誌輸出目的地 * 2. 一個logger子元素定義一個日誌寫出器 --> <!-- catalina.out --> <appender name="consoleAppend" class="org.apache.log4j.ConsoleAppender" > <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p][%t][%c{1}]-[%M] %m%n" /> </layout> </appender> <!-- error log --> <appender name="errorAppend" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${webapp.root}/logs/error/error.log" /> <param name="Append" value="true" /> <param name="DatePattern" value="yyyy-MM-dd-HH-mm"/> <param name="encoding" value="utf-8"/> <layout class="org.apache.log4j.TTCCLayout"> </layout> </appender> <!-- 消費者消費的消息記錄 --> <appender name="taskExcutorAppend" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${webapp.root}/logs/excutor/excutor.log" /> <!-- 最大文件的size,單位:Kb,Mb... --> <param name="MaxFileSize" value="4096" /> <!-- 重啓了服務器以後,是否在原有文件的後面追加?true(默認):追加;false:不追加 --> <param name="Append" value="true"/> <!-- 默認 MaxBackupIndex 爲 1 --> <param name="MaxBackupIndex" value="10" /> <param name="Encoding" value="utf-8"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p] %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <!-- logger的做用: 1.[name屬性]:指定你定義Logger對象時候的name 2. additivity : children-logger是否使用 rootLogger的配置, additivity在log4j默認爲true。這解釋了爲何有些時候,一個日誌信息在屏幕上會有屢次輸出。 3.還能夠指定level(輸出級別)、appender-ref(指定哪一個append) --> <!-- loggers --> <logger name="com.raycloud.picture.task.consumer.PictureVideoTaskExcutor" additivity="true"> <!-- 若是1個包想對應多個 Appender 就這樣,對於每一個Appender自定義的日誌級別能夠在Appender上加上filter --> <appender-ref ref="taskExcutorAppend" /> </logger> <!-- root的做用(至關於全局的意思): 1.[priority ]:指定默認的全局輸出級別 2.[appender-ref ]:指定一些默認的append(沒有指出特殊包或者類,即那些沒有指定<logger>元素的append)的輸出; --> <root> <priority value="INFO" /> <!-- 將 logger 中 additivity=true 的日誌或者沒有指定<logger>的append輸出到控制檯 --> <appender-ref ref="consoleAppend" /> <!-- 將全局的 error 日誌輸出到error文件中 --> <appender-ref ref="errorAppend" /> </root> </log4j:configuration>