一句話概括處理過程:
?????? 首先日志消息被創建,然后傳遞給能夠處理日志消息的日志對象,再通過設定日志的輸出方式和輸出格式后,最終日志信息得到處理。
log4j是什么。
優先級???
?? 從上面的圖可以看到,消息傳來時,首先會經過一個優先級判定。Log4j為日志信息定義了7種不同的優先級,定義這幾個優先級的依據是產生日志信息的源。有時你需要在debug的時候輸出,就像system.out.println();有時你在處理同時1000條數據時,你想看看當前處理的進度,可以通過日志信息輸出。為了區別對待這些不同的日志信息,就定義了不同的優先級。
Logger log=Logger.getLogger(Test.class); //output different log-message log.debug("This is Debug message"); log.info("This is Info message"); log.warn("This is Warn message"); log.error("This is Error message"); log.fatal("This is fatal message");
log4j原理?log4j的優先級列表如下:
優先級別 | 代表的意義 |
ALL | 所有信息都輸出 |
DEBUG | 程序調試的消息輸出 |
INFO | 程序運行時粗過程的消息 |
WARN | 程序可能出現問題的警告消息 |
ERROR | 程序出現嚴重的問題的錯誤消息 |
FATAL | 程序出現致命的錯誤,應立即停止 |
OFF | 關閉日志處理,不輸出 |
?
?
?
?
?
?
?
一般在程序中經常使用的DEBUG、INFO、WARN和ERROR這四個級別。
Appender
?? 創建完對應級別的logger之后,就是要定義輸出處理了,也就是上圖中的Output Handler。方法是實現接口Appender,這個接口定義日志信息要輸出到什么地方去。常用的Appender實現類如下:
Appender實現類 | 詳細信息 |
ConsoleAppender | 把日志信息通過system.out輸出到控制臺窗口。 |
FileAppender | 把日志信息輸出到指定的文本中。 |
DailRollingFileAppender | 繼承FileAppender,只不過會根據設定天數產生。 |
RollingFileAppender | 繼承FileAppender,當日志文件大于摸個設定值時產生新的日志。 |
WriterAppender | 把日志信息以流的格式發送到指定的地方。 |
SMTPAppender | 把日志信息屹email進行發送。 |
SocketAppender | 把日志信息通過Socket的方式發送給遠程日志服務器。 |
JDBCAppender | 把日志信息存入數據庫。 |
SocketHubAppender | 把日志信息以Socket的方式發給若干個遠程日志服務器。 |
?
?
?
?
?
?
?
?
?
?
?
?
Layout
?? 還是上圖,設定好了將日志信息輸出至什么地方之后,就要設置輸出的樣式。方法是實現Layout接口,對日志信息按照指定的格式輸出。
Layout實現類 | 詳細信息 |
HTMLLayout | 把日志信息格式化成HTML的表格形式輸出。 |
SimpleLayout | 簡單形式輸出,是輸出優先級和內容。 |
XMLLayout | 把日志信息以XML格式進行輸出。 |
TTCCLayout | 輸出時間、線程、類別等信息。 |
PatternLayout | 按照指定符號格式輸出日志信息。 |
?
?
?
?
?
?
?
實例代碼如下:
Logger log=Logger.getLogger(Test.class); HTMLLayout layout=new HTMLLayout(); FileAppender appender=null; try{appender=new FileAppender(layout,"logfile.htm",true); }catch(IOException){e.printStackTrace(); } //set appender log.addAppender(appender); //set level log.setLevel(Level.DEBUG); log.debug("This is debug message");
?運行Test類后,在項目的根目錄下產生logfile.htm文件,打開之后,你可以看到日志信息以表格的形式展現。
但是,,,,通過這種代碼方式對log4j設定太不給力,真正常用的是通過配置文件來設置。So, to be continued.....
?
?