Log4j的XML配置文件详解
xml 格式的 log4j 配置文件需要使用 org.apache.log4j.html.DOMConfigurator.configure()方法
来读入。对 xml 文件的语法定义可以在 log4j 的发布包中找到: org/apache/log4j/xml/log4j.dtd。
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)
xml 配置文件的头部包括两个部分: xml 声明和 dtd 声明, 不多介绍。头部的格式如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
log4j:configuration (root element)
xmlns:log4j [#FIXED attribute]
定义 log4j 的名字空间,取定值"http://jakarta.apache.org/log4j/"
appender [* child] : 一个 appender 子元素定义一个日志输出目的地
logger [* child] : 一个 logger 子元素定义一个日志写出器
root [? child] : root 子元素定义了 root logger
appender 元素定义一个日志输出目的地。
name [#REQUIRED attribute] : 定义 appender 的名字,以便被后文引用
class [#REQUIRED attribute] : 定义 appender 对象所属的类的全名
param [* child] : 创建 appender 对象时传递给类构造方法的参数
layout [? child] : 该 appender 使用的 layout 对象
layout 元素定义与某一个 appender 相联系的日志格式化器。
class [#REQUIRED attribute] : 定义 layout 对象所属的类的全名
param [* child] : 创建 layout 对象时传递给类构造方法的参数
logger 元素定义一个日志输出器。
name [#REQUIRED attribute] : 定义 logger 的名字,以便被后文引用
additivity [#ENUM attribute] : 取值为"true"(默认)或者"false",是否继承父 logger 的属性
level [? child] : 定义该 logger 的日志级别
appender-ref [* child] : 定义该 logger 的输出目的地
root 元素定义根日志输出器 root logger。
param [* child] : 创建 root logger 对象时传递给类构造方法的参数
level [? child] : 定义 root logger 的日志级别
appender-ref [* child] : 定义 root logger 的输出目的地
level 元素定义 logger 对象的日志级别。
class [#IMPLIED attribute] : 定义 level 对象所属的类,默认情况下是"org.apache.log4j.Level
类
value [#REQUIRED attribute] : 为 level 对象赋值。可能的取值从小到大依次为"all"、 "debug"、
"info"、 "warn"、 "error"、 "fatal"和"off"。当值为"off"时表示没有任何日志信息被输出
param [* child] : 创建 level 对象时传递给类构造方法的参数
appender-ref 元素引用一个 appender 元素的名字,为 logger 对象增加一个 appender。
ref [#REQUIRED attribute] : 一个 appender 元素的名字的引用
appender-ref 元素没有子元素
param 元素在创建对象时为类的构造方法提供参数。
它可以成为 appender、 layout、 filter、 errorHandler、 level、 categoryFactory 和 root 等元素的
子元素。
name and value [#REQUIRED attributes] : 提供参数的一组名值对
param 元素没有子元素
在 xml 文件中配置 appender 和 layout
创建不同的 Appender 对象或者不同的 Layout 对象要调用不同的构造方法。可以使用 param 子元素来设定不同
的参数值。
创建 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>