Log4j學(xué)習(xí)
之前一直有在用Log4f,但是沒有系統(tǒng)學(xué)習(xí)過,現(xiàn)在把這個(gè)系統(tǒng)地學(xué)習(xí)一下..
1.核心對象和支持對象
核心對象包括:Logger,Layout,Appender
Logger對象負(fù)責(zé)獲取日志信息,我理解的就是去獲取日志信息,就是用戶代碼里直接體現(xiàn)的
Layout提供了各種風(fēng)格格式化
Appender將信息發(fā)布到不同的地方去,比如控制臺或者其他地方
支持對象:Level,Filter,ObjectRenderer,LogManager
Level:定義了日志信息的粒度和優(yōu)先級:OFF气笙、DEBUG、INFO、ERROR彼妻、WARN饵隙、FATAL畏鼓、ALL
Filter:輔助Appender對象去過濾決定是否需要將日志信息發(fā)布到目的地
ObjectRenderer:ObjectRenderer 對象負(fù)責(zé)為傳入日志框架的不同對象提供字符串形式的表示,Layout 對象使用該對象來準(zhǔn)備最終的日志信息嘿悬。
LogManager:對象管理日志框架,它負(fù)責(zé)從系統(tǒng)級的配置文件或類中讀取初始配置參數(shù)锋爪。
2.Log4j用法示例
Log4j.properties文件是Log4j的配置文件,默認(rèn)情況下放到src目錄下即會自動(dòng)查找到
語法示例:
#定義輸出級別為DEBUG副硅,后面的那個(gè)為定義的輸出信息(包含輸出位置這些信息)
log4j.rootLogger=DEBUG,first
#定義輸出的目的地,控制臺
log4j.appender.first=org.apache.Log4j.ConsoleAppender
#定義輸出的格式,常用參數(shù)列表如下姥宝,下面的第一行感覺是為first的PatterLayout變量賦值,然后在下一行繼續(xù)去詳細(xì)定義
log4j.appender.first.layout=org.apace.Log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
配置參數(shù)詳解:
|參數(shù)|描述|實(shí)例|
|:---:|:---:|:----:|:---:|
|c|輸出Logger所在的類別(即Logger的名字)|%c將輸出完整的com.log4j.Log4jTest %c{1}將輸出Log4jTest 從右往左數(shù)的第n個(gè)
|C|輸出Logger所在類的名稱|%C(大寫的C),與上面的小寫的c的區(qū)別是,如果代碼是如下 private static Logger logger = Logger.getLogger(Object.class); 小寫的c會輸出Ojbect,大寫的C會輸出logger實(shí)際在哪個(gè)類進(jìn)行了日志輸出
|
|d|輸出日期格式化|%d{yyyy-MM-dd HH:mm:ss}
|F|輸出所在的類文件名稱|%F將輸出所在類的那個(gè)地方|
|l|輸出語句所在的行數(shù),包括類名,方法名,文件名,行數(shù)等|%l 將輸出詳細(xì)的log位置|
|L|輸出所在的行數(shù)|%L將輸出所在的行數(shù)
|p|輸出日志級別|DEBUG,INFO,ERROR
|M|輸出方法名|%M將輸出main,如果是在構(gòu)造方法里輸出日志,將是init
|m|表示輸出的日志,即message|%m
|n|換行|換行
|t|輸出當(dāng)前線程的名稱|%t
|%|%%用來輸出百分號|輸出百分號
|r|程序啟動(dòng)到日志輸出的時(shí)間間隔|%r
3.日志級別
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
需要是大于某個(gè)級別的日志才會輸出
4.輸出目的地
ConsoleAppender
FileAppender
JDBCAppender
RollingFileAppender
5.日志格式
DateLayout
HTMLLAyout
PatternLayout 上面的示例用的是PatternLayout
SimpleLayout
XMLLAyout
6.FileAppender的一些參數(shù)
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE
# 設(shè)置日志目的地
Log4j.appender.FILE=org.apache.Log4j.FileAppender
# 設(shè)置日志文件名
log4j.appender.FILE.File=${log}/log.out
# 設(shè)置日志輸出流是否每次都刷新到文件中去
log4j.appender.FILE.ImmediateFlush=true
# 設(shè)置appender對象的閥值想许,覆蓋初始化的那個(gè)閥值
log4j.appender.FILE.Threshold=debug
# 默認(rèn)是追加到文件的末尾伶授,這里false是指覆蓋
log4j.appender.FILE.Append=false
# 是否打開緩沖區(qū)讀寫
log4j.appender.FILE.BufferedIO=false
# 如果打開緩沖區(qū)讀寫,默認(rèn)的緩沖為8kb
log4j.appender.FILE.BufferSize=8KB
# 設(shè)置輸出格式
log4j.appender.FILE.layout=org.apache.Log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
ps:關(guān)于大小寫流纹,如果value那邊是一個(gè)類的話糜烹,左邊的key就是首字母小寫的駝峰命名,如果右邊是一個(gè)參數(shù)的話漱凝,可以就是首字母大些的駝峰命名
7.RollingFileAppender
RollingFileAppender繼承于FilaAppender疮蹦,有FileAppender的所有屬性,可以在日志文件大到一定閥值的情況下寫入另外一個(gè)文件
#設(shè)置單個(gè)文件的最大大小
log4j.appender.FILE.MaxFileSize=5KB
# 即設(shè)置保留的日志個(gè)數(shù)
log4j.appender.FILE.MaxBackupIndex=2
8.DailyRollingFileAppender
根據(jù)日期為分割輸出多個(gè)日志文件
#每天中午和午夜回滾文件茸炒,即一天回滾兩次
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a
#每天午夜回滾文件
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
#以此類推愕乎,yyyy-MM最后一個(gè)即為回滾的最小單位
#根據(jù)地域每周的第一天回滾
log4j.appender.FILE.DatePattern='.'yyyy-ww
9.使用數(shù)據(jù)庫記錄日志
使用數(shù)據(jù)庫記錄日志之前需要新建對應(yīng)的數(shù)據(jù)庫和表
log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
#設(shè)置緩沖區(qū)大小,就是夠多少條日志了執(zhí)行一次插入壁公,這里的DATABASE是自定義的
log4j.appender.DATABASE.BufferSize=1
#設(shè)置驅(qū)動(dòng)
log4j.appender.DATABASE.Driver=com.mysql.jdbc.Driver
#設(shè)置url
log4j.appender.DATABASE.URL=jdbc:mysql://localhost/DBNAME
#設(shè)置用戶名
log4j.appender.DATABASE.User=user_name
#設(shè)置密碼
log4j.appender.DATABASE.Password=password
#設(shè)置每次記錄日志觸發(fā)的sql感论,這里的x好像是os的用戶id
log4j.appender.DATABASE.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')
總結(jié)
使用log4j的配置文件如下:
1.定義rootLogger
log4j.rootLogger = ERROR,console
第一個(gè)是日志輸出等級,第二個(gè)即是我們自定義的輸出的位置
2.然后繼續(xù)去補(bǔ)充輸出位置的配置console的詳細(xì)信息
log4j.appender.console = org.apache.log4j.ConsoleAppender
3.配置該輸出位置的其他屬性
比如如果輸出目的地是數(shù)據(jù)庫的話紊册,需要配置驅(qū)動(dòng)等
4.配置輸出配置的格式
log4j.appender.console.layout = org.apache.log4j.PatternLayout
5.然后配置輸出格式的屬性
log4j.appender.console.layout = org.apache.log4j.PatternLayout
最后比肄,關(guān)于配置信息中的大小寫問題如下,我的總結(jié)如下:
關(guān)于大小寫,如果value那邊是一個(gè)類的話芳绩,左邊的key就是首字母小寫的駝峰命名掀亥,如果右邊是一個(gè)參數(shù)的話,可以就是首字母大些的駝峰命名