?? Log4j
有三個(gè)主要的組件:
Loggers
,
Appenders
和
Layouts
,即日志類別,日志要輸出的地方和日志以何種形式輸出。
1
、
Loggers
???
Loggers
組件在此系統(tǒng)中被分為六個(gè)級(jí)別:
TRACE
、
DEBUG
、
INFO
、
WARN
、
ERROR
和
FATAL
2
、
Appenders
??Log4j
日志系統(tǒng)允許把日志輸出到不同的地方,如控制臺(tái)(
Console
)、文件(
Files
)、根據(jù)天數(shù)或者文件大小產(chǎn)生新的文件、以流的形式發(fā)送到其它地方等等。
其語法表示為:
org.apache.log4j.ConsoleAppender
(控制臺(tái))
org.apache.log4j.FileAppender
(文件)
org.apache.log4j.DailyRollingFileAppender
(每天產(chǎn)生一個(gè)日志文件)
org.apache.log4j.RollingFileAppender
(文件大小到指定尺寸時(shí)產(chǎn)生一個(gè)新的文件)
org.apache.log4j.WriterAppender
(將日志信息以流格式發(fā)送到任意指定的地方)
3
、
Layouts
???Log4j
可以在
Appenders
的后面附加
Layouts
來完成這個(gè)功能。
Layouts
提供了四種日志輸出樣式,如根據(jù)
HTML
樣式、自由指定樣式、包含日志級(jí)別與信息的樣式和包含日志時(shí)間、線程、類別等信息的樣式等等。
其語法表示為:
org.apache.log4j.HTMLLayout
(以
HTML
表格形式布局)
org.apache.log4j.PatternLayout
(可以靈活地指定布局模式)
org.apache.log4j.SimpleLayout
(包含日志信息的級(jí)別和信息字符串)
org.apache.log4j.TTCCLayout
(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
?
在實(shí)際編程時(shí),要使
Log4j
真正在系統(tǒng)中運(yùn)行事先還要對(duì)配置文件進(jìn)行定義。定義步驟就是對(duì)
Logger
、
Appender
及
Layout
的分別使用,具體如下:
1
、
配置根
Logger
,其語法為:
??? log4j.rootLogger = [ level ] , appenderName, appenderName, …
level
指
Logger
的優(yōu)先級(jí),
appenderName
是日志信息的輸出地,可以同時(shí)指定多個(gè)輸出地。
如:
log4j.rootLogger= INFO,A1,A2
2
、
配置日志信息輸出目的地
,其語法為:
??? log4j.appender.appenderName = fully.qualified.name.of.appender.class
???
可以指定上述五個(gè)目的地中的一個(gè)。
3
、
配置日志信息的格式
,其語法為:
??? log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
??
下面給出一個(gè)具體配置例子,在程序中可以參照?qǐng)?zhí)行:
??? log4j.rootLogger=INFO,A1
??? log4j.appender.A1=org.apache.log4j.ConsoleAppender
?? ?log4j.appender.A1.layout=org.apache.log4j.PatternLayout
??? log4j.appender.A1.layout.ConversionPattern=
??????????????????????????????????????? %-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
???
這里需要說明的就是日志信息格式中幾個(gè)符號(hào)所代表的含義:
-
X
號(hào)
: X
信息輸出時(shí)左對(duì)齊;
?? %p:
日志信息級(jí)別
?? %c:
日志信息所在地(類名),通常就是所在類的全名
?? %m:
產(chǎn)生的日志具體信息
?? %n:
輸出日志信息換行,
Windows
平臺(tái)為“
\r\n
”,
Unix
平臺(tái)為“
\n
”
? %r
輸出自應(yīng)用啟動(dòng)到輸出該
log
信息耗費(fèi)的毫秒數(shù)
%t
輸出產(chǎ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ù)。
4
、讀取配置文件
其語法為:
BasicConfigurator.configure ()
:
自動(dòng)快速地使用缺省
Log4j
環(huán)境。
PropertyConfigurator.configure ( String configFilename)
:讀取使用
Java
的特性文件編寫的配置文件。
DOMConfigurator.configure ( String filename )
:讀取
XML
形式的配置文件。
log4j
配置,一般可以采用兩種方式
.properties
和
.xml
。
一、
log4j.properties
#
設(shè)置對(duì)應(yīng)的級(jí)別
INFO,DEBUG,WARN,ERROR
和輸出地
A1
,
A2
log4j.category.com.test =ERROR,A1
log4j.category.com.test=INFO, A2
###
設(shè)置輸出地
A1
,為
ConsoleAppender(
控制臺(tái)
) ##
log4j.appender.A1=org.apache.log4j.ConsoleAppender
###
設(shè)置
A1
的輸出布局格式
PatterLayout(
可以靈活地指定布局模式)
##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
###
配置日志輸出的格式
##
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
###
設(shè)置輸出地
A2
到文件(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)
##
log4j.appender.A2=org.apache.log4j.RollingFileAppender
###
文件位置
##
log4j.appender.A2.File=C:/log4j/log.html
###
文件大小
##
log4j.appender.A2.MaxFileSize=500KB
log4j.appender.A2.MaxBackupIndex=1
##
指定采用
html
方式輸出
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
二、
log4j.xml
<?xml version="1.0" encoding="GB2312" ?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="com.test.all" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="
C:/log4j/log.
log" />
<!-- 設(shè)置是否在重新啟動(dòng)服務(wù)時(shí),在原有日志的基礎(chǔ)添加新日志 -->
<param name="Append" value="false" />
<param name="MaxBackupIndex" value="10" />
<!-- 設(shè)置輸出文件項(xiàng)目和格式 -->
<layout class="org.apache.log4j.PatternLayout">
??? <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
</appender>
<appender name="com.test.file " class="org.apache.log4j.RollingFileAppender">
<param name="File" value="
C:/log4j/output
.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
?????? <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
</appender>
<logger name="test.log">
? <level value="debug" /><!-- 設(shè)置級(jí)別 -->
? <appender-ref ref="com.test.file" /><!-- 與前面的通道id相對(duì)應(yīng) -->
</logger>
<root> <!-- 設(shè)置接收所有輸出的通道 -->
?? <appender-ref ref=" com.test.all" /><!-- 與前面的通道id相對(duì)應(yīng) -->
</root>
</log4j:configuration>
三、配置文件加載方法:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4jApp {
?? public static void main(String[] args) {
?????? DOMConfigurator.configure("
C:/log4j/
log4j.xml");
?????? //PropertyConfigurator.configure("
C:/log4j/
log4j.properties");
?????? Logger log=Logger.getLogger("com.test");
?????? log.info("Testing log.info()");
?? }
}