SSM框架之Log4j配置
前言
之前搭建SSM框架的時候我們曾經配置過log4j.properties檔案,那麼這個檔案主要是幹什麼的呢?配置的格式有哪些?在本文中會進行相關的講解。
log4j.properties
什麼是Log4j?
Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護程序等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。最令人感興趣的就是,這些可以通過一個配置檔案來靈活地進行配置,而不需要修改應用的程式碼。
所以簡單的來說,Log4j可以理解為一個通過配置檔案進行配置的日誌操作工具。
這個檔案幹什麼的?
我們都知道對一個web應用來說,日誌是非常重要的。log4j.properties這個檔案就是採用Log4j操作包完成日誌部分的操作配置。
如何讓SSM框架知道這個檔案?
這是一個非常關鍵的問題,之前講道我們採用配置Log4j來完成日誌部分的操作,但是SSM框架是如何知道這個配置檔案的存在並讓它起作用呢?
在我們之間搭建的工程中web.xml檔案有如下程式碼描述:
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param>
這裡就告訴了框架我們採用了Log4j配置,配置檔案位置是classpath路徑下的log4j.properties檔案。
這個檔案配置的格式?
Log4j配置檔案的基本格式如下:
#配置根Logger log4j.rootLogger = [level] , appenderName1 , appenderName2 , … #配置日誌資訊輸出目的地Appender log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.optionN = valueN #配置日誌資訊的格式(佈局) log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.optionN = valueN
對比我們之前的log4j.properties檔案,我們講解一下各部分的格式具體含義:
log4j.rootLogger=INFO,Console,File
#控制檯日誌
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
#普通檔案日誌
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=logs/ssm.log
log4j.appender.File.MaxFileSize=10MB
#輸出日誌,如果換成DEBUG表示輸出DEBUG以上級別日誌
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
首先對於基本格式中的配置根Logger這部分來說log4j.rootLogger = [level] , appenderName1 , appenderName2 , …
我們的log4j.properties檔案相應內容如下:log4j.rootLogger=INFO,Console,File
其中[level]是日誌輸出級別分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裡定義的級別,您可以控制到應用程式中相應級別的日誌資訊的開關。比如在這裡定義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被打印出來。
appenderName:就是指定日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。例如:log4j.rootLogger=INFO,Console,File
配置了2個輸出地方,這個名字可以任意(如上面的Console和File),但必須與我們在後面進行的設定名字對應。例如:log4j.appender.Console
中的Console 和 log4j.appender.File
中的File就是對應之前寫的名稱。
在看接下來配置日誌資訊輸出目的地Appender和配置日誌資訊的格式(佈局)的部分。
Appender 為日誌輸出目的地,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(檔案),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案),
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案),
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
Layout為日誌輸出格式,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
那麼,我們log4j.properties的內容是否不難理解了。
#控制檯日誌
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
appenderName為Console的日誌輸出目的地為控制檯,採用了可以靈活地指定佈局模式的格式。
至於其他的格式可以參考文章 配置Log4j
總結
到這裡,關於SSM框架日誌部分Log4j的配置講解結束了。
專案github地址,有興趣的朋友可以參考: ssm-demo