log4j2,一个JAVA应用日志框架。
配置文件必须以log4j2.xml
命名。
导包
log4j2的包:
- log4j-api-2.10.0.jar: api的包,建议2.6以上;
- log4j-core-2.10.0.jar: core的包,建议2.6以上;
整合slf4j时,需要导入:
- log4j-slf4j-impl-2.10.0.jar:对log4j支持的包,建议2.6以上;
- slf4j-api-1.7.25.jar:slf4j-api的包;
<Configuration/>
标签
说明
这个标签是log4j2.xml配置文件的根标签。
部分属性介绍
参数名称 | 描述 |
---|---|
monitorInterval | 如果设置了monitorInterval这个参数,则项目在运行时,会按照设置的参数值定期扫描日志配置,动态地改变日志的配置。参数的单位为秒,最低值为5。 |
name | 这个设置日志配置的名称。 |
status | 这个参数通常会见到,用于设置log4j内部代码的日志打印级别.它有这些可能的值:trace,debug,info,warn,error,fatal。如果设置的级别越高,那么logj4j内部的日志打印就会越少。 |
strict | 设置日志配置是否为简洁模式还是精确模式。不支持JSON的配置方式。 |
schema | 指定文档约束。 |
<Loggers/>
标签
说明
包含一个默认的日志事件和多个其他独特的日志事件。使用<logger>..<logger/>
来配置单个的日志事件。
<Loggers/>
子标签介绍
标签名称 | 描述 |
---|---|
<Root/> | 必须有的标签。用于配置默认的日志事件打印。参见<Root/> 标签的介绍 |
<Logger/> | 一个可配日志事件。用于配置那块代码中的日志打印到哪些地方。参见<Logger/> 标签的介绍 |
<Root/>
部分参数及子标签介绍
Root标签参数介绍
Root标签没有name标签
参数名称 | 描述 |
---|---|
level | 指定默认的日志打印级别 |
Root标签子标签介绍
标签名称 | 描述 |
---|---|
<AppenderRef/> | 通常都会有的一个子标签。用于引用Appender。可以引用多个Appender。 |
<Logger/>
部分参数及子标签介绍
Logger标签属性介绍
参数名称 | 描述 |
---|---|
name | 这个参数是必须的。指定具体的要打印的日志。通常是一个包路径。 |
level | 通常都会有的一个参数,当然也可以没有。用于设置日志的打印级别。参数的具体值与前面介绍的<Configuration/> 标签中的status的参数值相同。默认为ERROR |
additivity | 通常都会有的一个参数,当然也可以没有。通常设置的值为false。如果设置了此参数,则表示不会日志的事件不会跳转到满足此事件条件的另一个logger中。通常打印出2条相同的日志就是因为没有设置此参数的值为false。默认为true。 |
Logger子标签
标签名称 | 描述 |
---|---|
<AppenderRef/> | 参见Root标签子标签<AppenderRef/> 的介绍。 |
<Appenders/>
标签
说明
这个标签包含多个<Appender/>
子标签,用于指定日志输出的位置及格式。在配置时,可以使用Appender标签插件的形式,如<Console/>
标签,也可以使用指定类型的方式,如:<Appender type='Console'>...<Appender/>
。
<Console/>
标签
console 标签用于设置向控制台输出日志。
for example:
<Console name="Console">
<!-- 日志输出格式 -->
<PatternLayout pattern="${pattern}"/>
<!-- 日志级别过滤器 -->
<ThresholdFilter onMatch="ACCEPT" onMismatch="DENY" level="INFO"/>
</Console>
<RollingFileAppender/>
标签
用于向文件中滚动输出日志。
标签属性
属性 | 类型 | 描述 |
---|---|---|
append | boolean | 追加。是否追加日志到文件,默认true,当设置为false时,每此输入日志都会将之前的文件内容删除。 |
bufferedIO | boolean | 缓存。在写文件时,设置是否采用缓存,当缓存空间满了或者设置了immediateFlush属性为true ,才会写入到文件中。设置此参数通常会提高性能。 |
bufferSize | int | 缓存大小。当bufferedIO属性为true时生效,默认值为8192bytes。 |
createOnDemand | boolean | 请求创建。当日志满足过滤器条件,可以被写入到文件中时,才创建文件。默认false。 |
filter | Filter | 过滤器。可以用CompositeFilter引用多个过滤器。 |
fileName | String | 文件名。日志写入的文件,如果文件路径不存在,则主动创建。 |
filePattern | String | 文件名格式。依赖于日志滚动策略,可以使用默认的滚动策略,采用SimpleDateFormat的%date日期格式和%i的integer计数器。 |
immediateFlush | boolean | 立即刷新-默认true。如果设置为true,则每次输出日志都会写入到文件,但可能影响性能。如果设置了日志缓存,建议设置为false。 |
layout | Layout | 日志格式。设置日志内容的格式,参见Patterns-输出格式一栏。 |
name | String | 名字。Appender的名字。 |
policy | TriggeringPolicy | 驱动策略。决定是否要滚动日志。 |
strategy | RolloverStrategy | 滚动策略。决定如何滚动日志。 |
ignoreExceptions | boolean | 忽略异常-默认true。如果设置为false,在写入文件时出现了异常,就会抛出日志到调用处。 |
驱动策略
决定是否要滚动日志文件。
- 基于JVM启动的滚动策略。当虚拟机启动时,就创建文件。
for example:<OnStartupTriggeringPolicy/>
- 基于文件大小的滚动策略。当文件大小到指定的值时,就创建新的文件,有一个属性size可以设置,单位:KB,MB,GB。
for example:<SizeBasedTriggeringPolicy size="1 GB" />
- 基于时间的滚动策略。当设置的date/time格式不满足文件时,创建新的文件。
for example:<TimeBasedTriggeringPolicy />
Filters-过滤器
说明
日志事件过滤器。log4j2提供了多种日志事件的过滤器,通过过滤器,可以将日志打印设置为在何时、何地调用何种级别打印到何种地方。
部分过滤器介绍
日志等级过滤器
可以在此过滤器中设置一个日志级别,当满足此日志级别时,可以通过此过滤器的onMatch或者onMismatch参数值来确定要不要打印日志。
For example:
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>
属性说明:
参数 | 描述 |
---|---|
level | 等级。用于设置过滤的日志级别。 |
onMatch | 当打印的日志级别满足level值时,根据其参数值来确定要不要打印日志。 |
onMismatch | 当日志不满足level值时,根据其参数值来确定要不要过滤掉这条日志。 |
log4j2提供了3个可能的属性值,可以给onMatch和onMismatch使用:
参数值 | 描述 |
---|---|
ACCEPT | 接受 |
DENY | 拒绝 |
NEUTRAL | 放行。看是否满足下一个过滤器,根据下一个过滤器来确定是否要输出日志。 |
Patterns-输出格式
说明
通常使用<PatternLayout pattern="[%d{HH:mm:ss.SSS} %level %class.%M()]-----%msg%xEx%n"/>
这样的形式来控制日志打印的格式。
部分占位符介绍
占位符 | 描述 |
---|---|
%c{x} %class{x} | 打印传递给logger的类的名称及路径。在{} 中可以填入数字,比如:类的路径为”org.apache.commons.Foo”,则%c{1}输出”Foo”,%c{2}输出”commons.Foo”。可以不要{} ,则默认打印全路径。官方文档指出,打印类路径是一项昂贵的操作,可能影响性能,谨慎使用。 |
%d{x} %date{x} | 打印时间。{} 可以填写某种格式形式的字符串以表示不用格式的日期,官方提供的有:DEFAULT, ABSOLUTE, COMPACT, DATE, ISO8601, ISO8601_BASIC 。通常使用DEFAULT ,输出形式为:2012-11-02 14:34:02,781 。也可以自己指定格式,比如:yyyy-MM-dd HH:mm:ss ,则输出:2017-12-31 15:43:41 。 |
%n | 换行。如果不指定,则日志输出默认是不换行的。通常放在输出格式的最后。 |
%highlight | 高亮。用于指定不同级别的日志打印出不用的颜色。详细信息可参考官方文档。想要在eclipse的控制中做到这种效果,需要ANSI Escape in console 插件的支持,参考log4j日志在eclipse控制台显示颜色的配置 |
%M | 打印调用的方法名。官方文档指出,此项操作相当昂贵,可能影响性能,谨慎使用。 |
%l | 打印类的全路径和调用处的行号,同时附加一个链接,指向该日志的调用位置,在eclipse控制台中,点击链接,可以跳转到此日志的调用位置。官方文档指出,此项操作相当昂贵,可能影响性能,谨慎使用。经过本人测试,想要打印出类的全路径以及调用的方法名,%l 与%c.%M 性能相差无几,但是%l多一个链接的功能,可以优先选择%l输出。 |
%m | 打印传递给logger方法的用户日志信息。 |
%N | 打印当前时间的毫微秒。如同调用:System.nanotime() |
%pid | 打印应用的进程ID。 |
%r | 打印自虚拟机启动以来到此日志打印经过的毫秒数。 |
%sn | 打印日志调用的次数。内部为一个自增长的序列,值从0开始,为整个应用的静态全局变量, |
%T | 打印调用此日志的线程ID。 |