slf4j 是对日志框架实现制订的一个日志标准、规范、接口,不能独立应用,须要与具体的日志框架实现配合应用。log4j、logback、log4j2 别离是三种日志框架实现,其中 log4j2 是 log4j 1.x 和 logback 的改进版。
上面介绍一下 xml 格局的 log4j2 配置文件的根本配置。
1. xml 节点
Configuration
根节点。
- status,log4j2 日志框架实现本身的日志级别,OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
- monitorInterval,从新读取配置文件的间隔时间,单位为秒
Properties
属性(可选),用来定义常量,之后在其余配置项中通过 ${变量名} 援用。
Appenders
输入源,用于定义日志输入的中央,有控制台 ConsoleAppender、滚动文件 FileAppender、RollingRandomAccessFile 等。
RollingRandomAccessFile
依照肯定的策略滚动文件。
- name,指定 Appender 的名字
- fileName,以后日志文件的门路和名字
- filePattern,当产生滚动时,文件的转移和重命名规定
ThresholdFilter
决定日志事件是否被输入。
- ACCEPT(承受),DENY(回绝),NEUTRAL(中立)
- onMatch(该级别及以上),onMismatch(该级别以下)
PatternLayout
日志输入的格局,官网文档:http://logging.apache.org/log…
- %d,工夫,默认格局为 2012-11-02 14:34:02,123
- %level,日志级别,比方 FATAL、ERROR、WARN、INFO、DEBUG、RACE
- %thread,线程名字
- %c{1.},logger 名字,比方 LoggerName=org.apache.commons.Foo,Result=o.a.c.Foo
- %msg,日志信息
- %l,地位信息,等同于 %C.%M(%F:%L)
- %C、%class,残缺类名
- %M、%method,办法名
- %F、%file,文件名
- %L、%line,行号
- %n,换行
Policies
日志文件的滚动策略。
- TimeBasedTriggeringPolicy,和 filePattern 联合应用,日期格局决定工夫单位,interval 决定单位工夫距离;modulate,产生文件是否以 0 点偏移工夫
- SizeBasedTriggeringPolicy,日志文件大小滚动策略
DefaultRolloverStrategy
默认滚动策略
- max,日志文件保留的最多个数
2. 一个例子
<?xml version="1.0" encoding="UTF-8"?>
<!--status,log4j2 本身的日志级别,OFF>FATAL>ERROR>WARN>INFO>DEBUG>TRACE>ALL-->
<!--monitorInterval,从新读取配置文件的间隔时间,单位为秒 -->
<Configuration status="OFF" monitorInterval="30">
<!--Properties,属性(可选),用来定义常量,之后在其余配置项中通过 ${变量名} 援用 -->
<Properties>
<Property name="LOG_HOME">logs</Property>
<!--_TRACE_ID,业务自定义变量 -->
<property name="ALL_PATTERN">[%d][%level][%thread][%X{_TRACE_ID}][%c{1.}]- %msg -%n</property>
<property name="ERROR_PATTERN">[%d][%level][%thread][%X{_TRACE_ID}][%c{1.}]- %msg -[%l]%n</property>
<property name="CHARSET">UTF-8</property>
<property name="FILE_SIZE">1GB</property>
<property name="FILE_INDEX_MAX">30</property>
</Properties>
<!--Appenders,输入源,用于定义日志输入的中央 -->
<Appenders>
<!-- 控制台 -->
<Console name="CONSOLE-APPENDER" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>${ALL_PATTERN}</Pattern>
</PatternLayout>
</Console>
<!--RollingRandomAccessFile,依照肯定的规定滚动文件 -->
<!--name,指定 Appender 的名字 -->
<!--fileName,以后日志文件的门路和名字 -->
<!--filePattern,当产生滚动时,文件的转移和重命名规定 -->
<RollingRandomAccessFile name="ALL-APPENDER"
fileName="${LOG_HOME}/appName-all.log"
filePattern="${LOG_HOME}/%d{yyyyMMdd}/appName-all-%d{yyyyMMdd}-%i.log.gz">
<!--PatternLayout,日志输入的格局 -->
<PatternLayout>
<Pattern>${ALL_PATTERN}</Pattern>
</PatternLayout>
<!--Policies,日志文件滚动的策略 -->
<!--TimeBasedTriggeringPolicy,和 filePattern 联合应用,日期格局决定工夫单位,interval 决定单位工夫距离;modulate,产生文件是否以 0 点偏移工夫 -->
<!--SizeBasedTriggeringPolicy,日志文件大小滚动策略 -->
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${FILE_SIZE}"/>
</Policies>
<!--DefaultRolloverStrategy,默认滚动策略,max- 日志文件保留的最多个数 -->
<DefaultRolloverStrategy max="${FILE_INDEX_MAX}"/>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="ERROR-APPENDER"
fileName="${LOG_HOME}/appName-error.log"
filePattern="${LOG_HOME}/%d{yyyyMMdd}/appName-error-%d{yyyyMMdd}-%i.log.gz">
<!--Filters,决定日志事件是否被输入:ACCEPT(承受),DENY(回绝),NEUTRAL(中立);onMatch- 该级别及以上,onMismatch- 该级别以下 -->
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>${ERROR_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${FILE_SIZE}"/>
</Policies>
<DefaultRolloverStrategy max="${FILE_INDEX_MAX}"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 每个配置都必须有一个 Root logger,没有 name 属性、不反对 additivity 属性 -->
<!--level:日志输入级别,从低到高别离为:All<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF-->
<!--includeLocation:输入地位信息须要栈快照,对性能影响很大,所以异步 logger 默认敞开该性能,可通过设置为 true 关上 -->
<!--AppenderRef:指定该日志输入到哪个 Appender-->
<asyncRoot level="INFO" includeLocation="true">
<AppenderRef ref="CONSOLE-APPENDER"/>
<AppenderRef ref="ALL-APPENDER"/>
<AppenderRef ref="ERROR-APPENDER"/>
</asyncRoot>
<!--name:该 Logger 所实用的类或者类所在的包门路 -->
<!--additivity:设置日志事件是否在 Root logger 输入,为防止反复输入,可设置为 false-->
<asyncLogger name="com.xxx.xxx" level="INFO" additivity="false" includeLocation="true">
<AppenderRef ref="CONSOLE-APPENDER"/>
<AppenderRef ref="ALL-APPENDER"/>
<AppenderRef ref="ERROR-APPENDER"/>
</asyncLogger>
</Loggers>
</Configuration>