这几天开发的项目需要用到Log4j,以前没有接触过Log4j,因此需要快速掌握并应用此包.
本文内容:
- Log4j的介绍
- Log4j的应用
- Log4j与其他框架
Log4j的介绍
What?
Log4j是Apache的一个开放源代码的一个日志操作包(http://jakarta.apache.org/log4j)。Log4j可以帮助调试和分析。
概念?
Log4j有三个主要的组件,它们分别是:
- 记录器(Logger):记录器只管什么日志信息应该记录(日志记录级别),可不关心log数据存放。
- 存放器(Appender):log信息通过存放器输出到目的地.
- 布局(Layout):布局负责格式化输出的log信息。
Logger,Appender,Layout三大组件的关系是:一个Logger可以有多个Appender(可以同时输出到多个设备上),每个Appender对应一种Layout(示例见下图)。
Logger组件
有一个超类–log4j.rootLogger.它永远存在,且不能够通过名字引用.不过可以通过Logger类中的getRootLogger()获得.Logger组件的继承关系:
- 如果子类Logger组件没有定义日志级别,则将继承父类的日志级别
- 如果把子类Logger组件的additivity标志设为false(默认为true),那么它就不会继 承父类Appender,否则将继承父类所有的Appender.
Appender组件
决定将日志信息输出到什么地方。支持以下目的地:
- 控制台(Console)
- 文件(File)
- GUI组件(GUI component)
- 套接口服务器(Remote socket server)
- NT的事件记录器(NT Event Logger)
- UNIX Syslog守护进程(Remote UNIX Syslog daemon)
Layout组件
Layout组件决定日志输出格式,有以下几种类型:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
日志级别
一共有五种,级别由高到低依次是:fatal、error、warn、info、debug .获得Logger实例后,可调用相应的日志级别输出日志信息,当级别大于或等于Logger组件配置的日志级别时才调用.
Log4j应用
Log4j的配置
Log4j可以在程序中实现配置,但在配置文件中配置似乎更又维护性.Log4jLog4j支持两种格式的配置文件:XML格式和Java的property格式.本文以后者举例.
## LOGGERS ##
#配置 root logger,其语法为:
#
log4j.rootLogger = [ level ] , appenderName, appenderName, …
log4j.rootLogger=INFO,console
#定义一个名为myLogger的Logger
#日志级别为WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉.
log4j.logger.myLogger=WARN
#定义一个继承myLogger的Logger,
log4j.logger.myLogger.mySonLogger=,file
## APPENDERS ##
#定义一个名为console的appender, which is set to be a ConsoleAppender
log4j.appender.console=org.apache.
log4j.ConsoleAppender
# 定义一个名为file的appender, which is set to be a FileAppender
log4j.appender.file=org.apache.
log4j.FileAppender
#日志输出的文件
log4j.appender.file.File=htmllog.html
## LAYOUTS ##
# 设置console Appender的Layout为SimpleLayout
log4j.appender.console.layout=org.apache.
log4j.SimpleLayout
# 设置file Appender的Layout为HTMLLayout
log4j.appender.file.layout=org.apache.
log4j.HTMLLayout
#
log4j.appender.file.layout=org.apache.
log4j.PatternLayout
#
log4j.appender.file.layout.ConversionPattern=%t%p-%m%n
更多的Appender和Layout请查看Log4j的API
在程序中使用Log4j
首先将Log4j的jar包(log4j-1.2.15.jar)导入到工程中,然后再写Log4j的配置文件(log4j.properties) ,在程序中使用API.举例:
import
org
.
apache
.
log4j
.
Logger
;
import
org
.
apache
.
log4j
.
PropertyConfigurator
;
public
class
Test
{
public
static
void
main
(
String
[]
args
)
{
// Load the proerties using the PropertyConfigurator
PropertyConfigurator
.
configure
(
"
config/log4j.properties
"
)
;
// Get an instance of the myLogger
Logger
myLogger
=
Logger
.
getLogger
(
"
myLogger
"
)
;
// Get an instance of the childLogger
Logger
mySonLogger
=
Logger
.
getLogger
(
"
myLogger.mySonLogger
"
)
;
// Log Messages using the Parent Logger
myLogger
.
debug
(
"
This is a log message from the
"
+
myLogger
.
getName
())
;
myLogger
.
info
(
"
This is a log message from the
"
+
myLogger
.
getName
())
;
myLogger
.
warn
(
"
This is a log message from the
"
+
myLogger
.
getName
())
;
myLogger
.
error
(
"
This is a log message from the
"
+
myLogger
.
getName
())
;
myLogger
.
fatal
(
"
This is a log message from the
"
+
myLogger
.
getName
())
;
mySonLogger
.
debug
(
"
This is a log message from the
"
+
mySonLogger
.
getName
())
;
mySonLogger
.
info
(
"
This is a log message from the
"
+
mySonLogger
.
getName
())
;
mySonLogger
.
warn
(
"
This is a log message from the
"
+
mySonLogger
.
getName
())
;
mySonLogger
.
error
(
"
This is a log message from the
"
+
mySonLogger
.
getName
())
;
mySonLogger
.
fatal
(
"
This is a log message from the
"
+
mySonLogger
.
getName
())
;
}
}