log4j的支持两种类型的配置文件log4j.properties和log4j.xml。
且当两个文件都存在时, 优先加载log4j.xml文件,即使log4j.properties文件在classes下,log4j.xml在jar包中
xml格式比properties的功能更为强大些。 例如, 可以通过filter指定日志打印的级别, 详见以下输出到控制台的配置
log4j推荐使用的4个级别的日志:error>warn>info>debug
特别提醒:
a. 以下提到的通道即appender节点
b. 在appender节点中的子节点需要按照以下顺序罗列,否则会提示错误: errorHandler?,param*,layout?,filter*,appender-ref*
c. 一定要包含root节点, 否则会打印红色日志, 要求初始化log4j日志系统
d. 通道要在root中引用才有效
1. 基本元素:
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名. eg: com.foundersc.log.Demo1
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志打印时间,可以指定时间格式,
eg:
%d{yyy MMM dd HH:mm:ss}: 2017 六月 03 14:38:35
%d{yyy MM dd HH:mm:ss}: 2017 06 03 14:44:58
%l 输出日志事件的发生位置,包括方法全限定名、在代码中的行数。eg:com.foundersc.log.Demo1.info(Demo1.java:15)%m 输出日志内容
2. 日志输出目的地及其输出方式, 如:控制台, 文件
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3. 常用的节点标签:
<!-- name:相当于id, 该日志通道的唯一标识, class:该通道使用的日志输出方式 -->
<appender name="" class=""></appender>
<!-- 暂不介绍 -->
<logger name="" additivity="false"></logger>
<!-- 暂不介绍 -->
<category name="" additivity="false"></category>
4.日志输出到控制台
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<!-- 打印日志的样式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyy MM dd HH:mm:ss} %t %c %l %n" />
</layout>
<!--滤镜设置输出的级别范围-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<!-- 输出的最低级别日志 -->
<param name="levelMin" value="debug" />
<!-- 输出的最高级别日志 -->
<param name="levelMax" value="info" />
</filter>
</appender>
5. 日志输出到指定文件:
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" value="UTF-8"/>
<!-- 指定日志输出文件,如果不是绝对路径,则以项目的根目录为当前目录 -->
<param name="file" value="E:/java/eclipse_logs/file.log" />
<!-- 重启服务时是否覆盖原有文件内容。 true:在原有日志的基础上追加内容, false:新日志覆盖原有的日志 -->
<param name="append" value="false" />
<!-- MaxBackupIndex:查询资料解释为日志备份的数量, 暂时还未发现实际的作用 -->
<param name="MaxBackupIndex" value="10" />
<!-- 打印日志的格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
</appender>
6. 不同级别的日志输出到不同的文件中: 主要是用filter使最大级别和最小级别一样,并指定日志文件
<appender name="info-file" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="info.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="500KB" />
<param name="MaxBackupIndex" value="2" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyy MM dd HH:mm:ss} %t %c %l %n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="INFO" />
<param name="LevelMin" value="INFO" />
</filter>
</appender>
7. 在root中引用要使用的日志通道, 否则日志系统无效, 且会打印日志要求初始化log4j系统
<root>
<level value="debug"/>
<appender-ref ref="console" />
</root>
8. log4j.xml 命名空间及其根
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
</log4j:configuration>