學習一項新東西之前,我常常問自己:
這項技術是什么?
這項技術為我們做了什么?
為什么不用其他類似的技術?
如何使用這項技術?
于是我帶著這些問題開始學習apache log4j
一,apache log4j是什么
The Apache Logging Services Project creates and maintains open-source software related to the logging of application behavior and released at no charge to the public.
這面這段話是apache日志服務官網首頁的一段話,意思就是說用來記錄程序的行為,開源免費。
而log4j是apache為Java提供的日志管理工具,目前可以用于生產的最新版本是Log4j 2.11.0,2.4及更高版本依賴于JDK7,
2.0-alpha1 to 2.3依賴于JDK6.
二,log4j為我們做了什么
2.1,日志分級
日志級別從低到高分為7個級別:
all:輸出所有日志信息
debug:輸出調試信息
info:輸出提示信息
warn:表明可能有潛在錯誤的情形,輸出警告信息
error :表明發生了錯誤事件,但不影響系統運行,輸出錯誤信息
fatal:表明發生了嚴重的錯誤,可能導致系統停止運行
off:關閉日志輸出
2.2,多樣化的日志存儲方式
可以輸出到控制臺、文件、Socket、郵件、數據庫或者自定義Appender
如何配置不同的Appender,https://blog.csdn.net/qq_30788845/article/details/53083774
2.3,日志格式化
log4j,通常%加其他字符,代表以什么格式輸出什么信息
三,log4j和common-logging、slf4j的關系
網上有很多關于這方面的博客,這里暫且不討論這個問題。
四,為什么不用其他的日志工具
log4j很強大、很好用。
五,log4j.properties文件示例
下面是實際項目的log4j配置文件
###loggers###
#log4j.rootLogger=INFO,console,R
log4j.rootLogger=INFO,R
#sql
log4j.logger.com.think.base.jdbc=ERROR###consoleAppender###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS}[%t][%.30c:%L][%p]-%m%n###detailAppender###
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.Threshold=ERROR
log4j.appender.R.Append=true
log4j.appender.R.File=/srv/www/app/demo/log/detail.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{HH:mm:ss,SSS}[%t][%.30c:%L][%p]-%m%n
log4j.rootLogger=INFO,R
表示將INFO級別的日志輸出到目的地R,R在后面的配置中定義
log4j.logger.com.think.base.jdbc=ERROR
表示將com.think.base.jdbc這個類的日志級別設為Error
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
表示每天產生一個日志文件
log4j.appender.R.File=/srv/www/app/demo/log/detail.log
日志文件的路徑
log4j.appender.R.DatePattern='.'yyyy-MM-dd
歷史日志文件名的格式,比如說今天是2018年7月26號,那么昨天的日志文件名為detail.log.2018-07-25
log4j.appender.R.layout.ConversionPattern=%d{HH:mm:ss,SSS}[%t][%.30c:%L][%p]-%m%n
%d{HH:mm:ss,SSS}表示輸出時間,例如:18:20:38,448
%t表示輸出線程名,例如:Thread-310
%.30c表示輸出類的路徑和名稱(超過30個個字符的部分不會輸出),例如:ve.fxc.stkkh.bus.util.BusUtils
%L表示輸出行號
%p表示輸出日志級別
?
?