1. 程式人生 > >SSM框架之Log4j配置

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中的Consolelog4j.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