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>


关注极客云图了解更多内容