1.Logger
类
通过
Logger
类的静态方法
Logger.getRootLogger
得到
RootLogger
。所有其他的
loggers
是通过静态方法
Logger.getLogger
来实例化并获取的。这个方法
Logger.getLogger
把所想要的
logger
的名字作为参数。
Logger
类的一些其它基本方法在下面列出:
package
org.apache.log4j;
public
class
Logger {
//
Creation and retrieval methods:
public
static
Logger getRootLogger();
public
static
Logger getLogger(String
name);
//
printing methods:
public
void
debug(Object message);
public
void
info(Object message);
public
void
warn(Object message);
public
void
error(Object message);
public
void
fatal(Object message);
//
generic printing method:
public
void
log(Level l, Object
message);
}
|
2. getLogger
方法
以一样的参数名字调用
getLogger
方法,返回的
reference
总是指向完全相同的
logger
对象。例如,在这里:
Logger
x
=
Logger.getLogger
(
"wombat"
);
Logger
y
= Logger.getLogger
(
"wombat"
);
|
x
和
y
指向完全相同的
logger
对象。
3.Log4j
使用流程
1
)根据配置文件初始化
log4j
log4j
可以使用
3
种配置器来初始化:
BasicConfigurator,DOMConfigurator,PropertyConfigurator
。
这里用的是
PropertyConfigurator
。使用
PropertyConfigurator
适用于所有的系统。如下的语句。
PropertyConfigurator.configure(
"log4j.properties"
);
|
就以
log4j.properties
为配置文件初始化好了
log4j
环境。对于一般的
java project
可以不使用上面的语句初始化
log4j
,
log4j
会自动在
classpath
下,找到配置文件并初始
化。如果
log4j
不
能自动初始化配置文件,那么就需要用上面的方法进行初始化。
注意:初始化配置文件,最好只在系统启动的时候执行一次,如果执行多次,一是浪费资源,二就是对于
老版本的
log4j
,
使用
DailyRollingFileAppender
时,可能会出现问题。
2
)导入
org.apache.log4j.Logger;
及相关包。
3
)在需要使用
log4j
的地方获取
Log
实例。
private
static
Logger log = Logger.getLogger(
"MyCLASS.class"
);
|
4
)使用
Logger
对象的
debug,info,fatal...
方法。
log.debug(
"it is the debug info"
);
|
4.Log4j
使用示例
Test.java
import
org.apache.log4j.Logger;
public
class
Test {
static
Logger
log
= Logger.getLogger
(Test.
class
);
public
void
log(){
log
.debug(
"Debug info."
);
log
.info(
"Info info"
);
log
.warn(
"Warn info"
);
log
.error(
"Error info"
);
log
.fatal(
"Fatal info"
);
}
public
static
void
main(String[]
args) {
Test
test =
new
Test();
test.log();
}
}
|
Log4j.properties
(具体配置属性定义见《
Log4j
配置说明》)
log4j.rootLogger=info,
stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to
output the caller's file
name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p
[%t] (%F:%L) - %m%n
|
结
果
INFO [main] (
Test.java:16
) -
Info
info
WARN [main] (
Test.java:17
) -
Warn
info
ERROR [main] (
Test.java:18
) -
Error
info
FATAL
[main] (
Test.java:19
) - Fatal info
分
析:
Test.java
“
Logger.getLogger(Test.class);
”这里的“
Test.class
”事实上传进去的是
Test
这个类的完整路径(包名
+
类名),“
test.Test
”。这样如果存在“
test
”这个
Log
那么
Test
这个
Log
就继承它,否则就继承
rootLogger
。
Log4j.properties
第一行,配置
log4j.rootLogger
。应为它是根,必须配置,否则别的
Log
无法继承。其他的
Log
可以配置也可以不配置。等号后面的第一个参数表示日志级别,可以填五个级别中的一种(
Log4j
默认把日志信息分为五个等级
debug
< info < warn < error < fatal
),后面的参数都是让
Log
知道输出到哪里,如果你想让日志输出到两个地方就加两个输出参数,比如:
log4j.rootLogger=info,
stdout
|
这里的
info
表示,该
Log
的日志级别为
info
,所有级别小于
info
的日志都不会被记录。比如使用这个配置文件的话,我刚开始举的那个类中:
log
.debug(
"Debug
info."
);
|
这句话是不起作用的,因为
debug
的级别小于
info
。这样就很容易控制什么信息在调试的时候要显示,什么信息在发布的时候要去掉。这些都不用改代码。
配置
stdout
,这个名字是随便取的,你可以叫它
A
:
log4j.appender.A=org.apache.log4j.ConsoleAppender
|
那么上面的
rootLogger
的参数
stdout
也要改成
A
,其他用到的地方当然也要改。这里的关键不是名字,而是
appender
类型,比如这里的“
ConsoleAppender
”,指输出
到
Console
。
后面两行都是设置日志格式的。