log4j2介绍及其配置

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个可能的属性值,可以给onMatchonMismatch使用:

参数值 描述
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。

猜你喜欢

转载自blog.csdn.net/weixin_40135537/article/details/78936054