<?xml version="1.0" encoding="UTF-8"?> <!-- 头文件 -->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!-- 定义log4j的名字空间,取定值"http://jakarta.apache.org/log4j/ -->
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
<!-- 打印在控制台 -->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<!-- appender [* child] : 一个appender子元素定义一个日志输出目的地 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />
</layout>
<!--过滤器设置输出的级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="debug" /> <!-- 最小级别 -->
<param name="levelMax" value="warn" /> <!-- 最大级别 -->
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!-- 滚动文件,自动记录最新日志 -->
<appender name="myFile" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/output.log" /><!-- 设置日志输出文件名 -->
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
</appender>
<!-- 每天产生一个日志文件 -->
<appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="E:/activex.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
</layout>
</appender>
<!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制-->
<!-- com.runway.bssp.activeXdemo包下的类打印日志,info级别以上,并且输出到 activexAppender
additivity="false":表示不继承父类logger,默认不同的logger互相有继承性
-->
<logger name="com.runway.bssp.activeXdemo" additivity="false">
<priority value ="info"/>
<appender-ref ref="activexAppender" />
</logger>
<!-- 根logger的设置-->
<root>
<!--
priority value ="debug":配置日志级别为debug
appender-ref:配置了日志输出地方,myConsole,myFile是两个appender 也就是两个日志输出地方
-->
<priority value ="debug"/>
<appender-ref ref="myConsole"/>
<appender-ref ref="myFile"/>
</root>
</log4j:configuration>
xml declaration and DTD
xml配置文件的头部包括两个部分:xml声明和DTD声明。头部的格式如下:
<?xml version="1.0" encoding="UTF-8" ?>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
appender元素定义一个日志输出目的地。
•name [#REQUIRED attribute] : 定义appender的名字,以便被后文引用
•class [#REQUIRED attribute] : 定义appender对象所属的类的全名
•param [* child] : 创建appender对象时传递给类构造方法的参数
•layout [? child] : 该appender使用的layout对象
layout
layout元素定义与某一个appender相联系的日志格式化器。
•class [#REQUIRED attribute] : 定义layout对象所属的类的全名
•param [* child] : 创建layout对象时传递给类构造方法的参数
logger
logger元素定义一个日志输出器。
•name [#REQUIRED attribute] : 定义logger的名字,以便被后文引用
•additivity [#ENUM attribute] : 取值为"true"(默认)或者"false",是否继承父logger的属性
•priority[? child] : 定义该logger的日志级别
•appender-ref [* child] : 定义该logger的输出目的地
root
root元素定义根日志输出器root logger
•param [* child] : 创建root logger对象时传递给类构造方法的参数
•priority[? child] : 定义root logger的日志级别
•appender-ref [* child] : 定义root logger的输出目的地
level
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-ref元素引用一个appender元素的名字,为logger对象增加一个appender。
•ref [#REQUIRED attribute] : 一个appender元素的名字的引用
•appender-ref元素没有子元素
param
param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、priority、categoryFactory和root等元素的子元素。
•name and value [#REQUIRED attributes] : 提供参数的一组名值对
•param元素没有子元素
总结:
log4j.xml文件输出地方一共五个:
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
log4j.xml的定义级别:
日记记录的优先级priority,优先级由高到低分为
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。
log4j.xml中layout中的参数:
格式说明layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):
%c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维 (如:“org.apache.elathen.ClassName”,%C{2}将输出elathen.ClassName)
%d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该log信息所耗费的毫秒数
%t 输出产生该日志事件的线程名