对log4j环境的配置就是对root logger的配置,包括把root logger设置为哪个级别(level);为它增加哪些appender,等等。这些可以通过设置系统属性的方法来隐式地完成,也可以在程序里调用XXXConfigurator.configure()方法来显式地完成。
可以通过两种方式来对log4j进行配置
A)程序配置
BasicConfigurator.configure()方法使用最简的方法配置log4j环境。注:所谓配置log4j环境,就是指配置root logger,因为所有其它的logger都是root logger的后代,所以它们(默认情况下)都将继承root logger的性质。
BasicConfigurator.configure()完成的任务是:
- 用默认pattern创建PatternLayout对象p:
PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x - %m%n"); - 用p创建ConsoleAppender对象a,目标是system.out,标准输出设备:
ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT); - 为root logger增加一个ConsoleAppender p:
rootLogger.addAppender(p); - 把root logger的log level设置为DEBUG级别:
rootLogger.setLevel(Level.DEBUG);
B) 文件配置
B1)Xml格式的配置文件
log4j的xml配置文件的树状结构如下所示,注意下图只显示了常用的部分。 :.
xml declaration and dtd
|
log4j:configuration
|
+-- appender (name, class)
| |
| +-- param (name, value)
| +-- layout (class)
| |
| +-- param (name, value)
+-- logger (name, additivity)
| |
| +-- level (class, value)
| | |
| | +-- param (name, value)
| +-- appender-ref (ref)
+-- root
|
+-- param (name, class)
+-- level
| |
| +-- param (name, value)
+-- appender-ref (ref)
创建ConsoleAppender对象
ConsoleAppender的构造方法不接受其它的参数。 :.
... ... ... ...
<appender name="console.log" class="org.apache.log4j.ConsoleAppender">
<layout ... >
... ...
</layout>
</appender>
... ... ... ...
创建FileAppender对象
可以为FileAppender类的构造方法传递两个参数:File表示日志文件名;Append表示如文件已存在,是否把日志追加到文件尾部,可能取值为"true"和"false"(默认)。 :.
... ... ... ...
<appender name="file.log" class="org.apache.log4j.FileAppender">
<param name="File" value="/tmp/log.txt" />
<param name="Append" value="false" />
<layout ... >
... ...
</layout>
</appender>
... ... ... ...
创建RollingFileAppender对象
除了File和Append以外,还可以为RollingFileAppender类的构造方法传递两个参数:MaxBackupIndex备份日志文件的个数(默认是1个);MaxFileSize表示日志文件允许的最大字节数(默认是10M)。 :.
... ... ... ...
<appender name="rollingFile.log" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/tmp/rollingLog.txt" />
<param name="Append" value="false" />
<param name="MaxBackupIndex" value="2" />
<param name="MaxFileSize" value="1024" />
<layout ... >
... ...
</layout>
</appender>
... ... ... ...
创建PatternLayout对象
可以为PatternLayout类的构造方法传递参数ConversionPattern。 :.
... ... ... ...
<layout class="org.apache.log4j.PatternLayout>
<param name="Conversion" value="%d [%t] %p - %m%n" />
</layout>
... ... ... ...
一个完整的例子如下:
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appender1" class="org.apache.log4j.FileAppender">
<param name="File" value="gasturbine.log1.txt"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
<appender name="appender2" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="gasturbine.log2.txt" />
<param name="Append" value="false" />
<param name="MaxBackupIndex" value="5" />
<param name="MaxFileSize" value="1024" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n" />
</layout>
</appender>
<root>
<level value ="debug"/>
<appender-ref ref="appender1"/>
<appender-ref ref="appender2"/>
</root>
</log4j:configuration>
可以用下面这种方法把配置信息文件读入到Java程序中:
DOMConfigurator.configure("classes/log4j.xml");
B1)文本文件形式的配置文件
一个例子:
log4j.properties
#Logger
log4j.rootLogger=DEBUG, appender1,appender2
#Appender1
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=gasturbine.log1.txt
#Appender2
log4j.appender.appender2=org.apache.log4j.RollingFileAppender
log4j.appender.appender2.File=gasturbine.log2.txt
log4j.appender.appender2.MaxFileSize=1024KB
log4j.appender.appender2.MaxBackupIndex=5
#Layout1
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=[%d] %t %c %-5p - %m%n
#Layout2
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d] %t %c %-5p - %m%n
#define the level of package
log4j.logger.gasturbine.model.component.compmodel.volume=DEBUG
与xml文件功能非常累似,就不再废话了
注意装载方式:PropertyConfigurator.configure("classes/log4j.properties");