Log日志:主要用于記錄程序運(yùn)行的情況,以便于程序在部署之后的排錯(cuò)調(diào)試等等!也有利于將這些信息進(jìn)行持久化(如果不將日志信息保存到文件或數(shù)據(jù)庫,則信息便會丟失)
Java Logging API
需JDK1.4版本以上才能支持。
java.util.logging.* 包是JDK的日志記錄API。
基本概念
l logger – 用來記錄日志的對象
l log level – 日志等級:從FINEST到SEVERE級別
n 請參考JDK文檔
l handler – 日志輸出處理器,即用來將格式化后的日志信息輸出,J2SE提供了下面的處理器
n StreamHandler – 將信息輸出到一個(gè)OutputStream對象
n ConsoleHandler – 將信息輸出到控制臺
n FileHandler – 將信息輸出到文件
n 還有Socket處理器和內(nèi)存處理器等
l Formater – 用來對日志信息進(jìn)行格式化
n SimpleFormater – 簡單的格式化輸出
n XmlFormater – Xml格式化輸出
l logManager – 日志管理器,它包含有那些被命名的logger,以及從配置文件中讀取來的一些控制信息
Log4j
基本概念
Log4j比JDK Logging更加成熟。Log4j是事實(shí)上 日志記錄標(biāo)準(zhǔn)。
三大概念:logger/appender/layout
l logger – 使用這個(gè)對象來進(jìn)行輸出
l appender – 使用這個(gè)對象來定義輸出到哪里去
l layout – 使用這個(gè)對象來定義輸出的格式
log4j的級別(level)
DEBUG < INFO < WARN < ERROR < FATAL
基本配置與使用
只需要將log4j.jar包放到類路徑中,并且保證在類路徑根目錄下有一個(gè)log4j.properties文件即可。Log4j.properties文件是對log4j的配置。
在log4j.properties中,可以配置logger/appender/layout/level等內(nèi)容。
l 了解如何配置logger
n log4j.rootLogger = [級別],[使用哪個(gè)appender]
n log4j.logger.[logger的名稱]=[級別],[使用哪個(gè)appender]
l 了解如何配置appender
n Log4j.appender.[appender的名稱]=[appender類名]
n Log4j.appender.[appender的名稱].[appender的屬性名]=[appender的屬性值]
u 如:對于ConsoleAppender來說,可以配置它的target屬性為System.out,而對于FileAppender來說,可以配置它的File屬性為一個(gè)文件名
l 了解如何配置layout
n Log4j.appender.[appender的名稱].layout=[layout類名]
n Log4j.appender.[appender的名稱].layout.[layout的屬性名]=[layout的屬性值]
n 最常見的是PatternLayout
u Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)見表1如下:
%m 輸出代碼中指定的消息
%p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
%r 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產(chǎn)生該日志事件的線程名
%n 輸出一個(gè)回車換行符,Windows平臺為“"r"n”,Unix平臺為“"n”
%d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
Commons log
通用Log處理,它是一個(gè)接口抽象,底層的實(shí)現(xiàn)可以自動替換:
如果當(dāng)前存在log4j,則使用log4j來實(shí)現(xiàn)
否則,使用JDK LOG來實(shí)現(xiàn)
否則,使用其自身的簡單實(shí)現(xiàn)