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的包;


标签

说明

这个标签是log4j2.xml配置文件的根标签。

部分属性介绍

参数名称 描述
monitorInterval 如果设置了monitorInterval这个参数,则项目在运行时,会按照设置的参数值定期扫描日志配置,动态地改变日志的配置。参数的单位为秒,最低值为5。
name 这个设置日志配置的名称。
status 这个参数通常会见到,用于设置log4j内部代码的日志打印级别.它有这些可能的值:trace,debug,info,warn,error,fatal。如果设置的级别越高,那么logj4j内部的日志打印就会越少。
strict 设置日志配置是否为简洁模式还是精确模式。不支持JSON的配置方式。
schema 指定文档约束。

标签

说明

包含一个默认的日志事件和多个其他独特的日志事件。使用..来配置单个的日志事件。

子标签介绍

标签名称 描述
必须有的标签。用于配置默认的日志事件打印。参见标签的介绍
一个可配日志事件。用于配置那块代码中的日志打印到哪些地方。参见标签的介绍

部分参数及子标签介绍

Root标签参数介绍

Root标签没有name标签

参数名称 描述
level 指定默认的日志打印级别

Root标签子标签介绍

标签名称 描述
通常都会有的一个子标签。用于引用Appender。可以引用多个Appender

部分参数及子标签介绍

Logger标签属性介绍

参数名称 描述
name 这个参数是必须的。指定具体的要打印的日志。通常是一个包路径。
level 通常都会有的一个参数,当然也可以没有。用于设置日志的打印级别。参数的具体值与前面介绍的标签中的status的参数值相同。默认为ERROR
additivity 通常都会有的一个参数,当然也可以没有。通常设置的值为false。如果设置了此参数,则表示不会日志的事件不会跳转到满足此事件条件的另一个logger中。通常打印出2条相同的日志就是因为没有设置此参数的值为false。默认为true。

Logger子标签

标签名称 描述
参见Root标签子标签的介绍。

标签

说明

这个标签包含多个子标签,用于指定日志输出的位置及格式。在配置时,可以使用Appender标签插件的形式,如标签,也可以使用指定类型的方式,如:...

标签

console 标签用于设置向控制台输出日志。
for example:

        <Console name="Console">
            
            <PatternLayout pattern="${pattern}"/>
            
            <ThresholdFilter onMatch="ACCEPT" onMismatch="DENY" level="INFO"/>
        Console>

标签

用于向文件中滚动输出日志。

标签属性

属性 类型 描述
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:

- 基于文件大小的滚动策略。当文件大小到指定的值时,就创建新的文件,有一个属性size可以设置,单位:KB,MB,GB。
for example:

- 基于时间的滚动策略。当设置的date/time格式不满足文件时,创建新的文件。
for example:


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-输出格式

说明

通常使用这样的形式来控制日志打印的格式。

部分占位符介绍

占位符 描述
%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。

你可能感兴趣的:(Java)