<?xml version="1.0" encoding="UTF-8"?>
<!--
配置参数
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数
-->
<!-- configure.status 为设置日志输出级别,级别如下:OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE、ALL -->
<!-- configure.monitorInterval 监控间隔 指log4j2每隔3600秒(一小时),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置 -->
<configuration status="OFF" monitorInterval="3600">
<properties>
<!-- 项目根目录创建logs文件夹 -->
<property name="LOG_HOME">logs</property>
<property name="LOG_BACK_HOME">${LOG_HOME}/backup</property>
<property name="ERROR_FILE_NAME">error</property>
<property name="WARN_FILE_NAME">warn</property>
<property name="INFO_FILE_NAME">info</property>
<property name="DEBUG_FILE_NAME">debug</property>
</properties>
<!--先定义所有的appender -->
<appenders>
<!--这个输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!--这个都知道是输出日志的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<!-- 配置日志输出文件名字 追加读写 -->
<!-- Error console log -->
<RollingFile name="ErrLog" fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log"
filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM-dd}/${ERROR_FILE_NAME}.%d{yyyy-MM-dd}.log"
append="true">
<!-- 输出格式 -->
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%t]%logger{36} - %msg%xEx%n" />
<!-- 设置策略 -->
<Policies>
<!-- 基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数: interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,
比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟 modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,
则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours, 那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,
之后的封存时间依次为08:00,12:00,16:00 -->
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
<!-- 配置过滤器,过滤掉不需要的日志 -->
<Filters>
<!-- ThresholdFilter.level: 输出级别 例:level=”info”,日志级别为info或者以上(匹配的界别)-->
<!-- ThresholdFilter.onMatch: DENY/ACCEPT 是否接受匹配该级别以上-->
<!-- ThresholdFilter.onMismatch: DENY/NEUTRAL 是否接受匹配该级别以下 NEUTRAL表示由下一个filter处理-->
<ThresholdFilter level="error"
onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile>
<!-- Warn console log -->
<RollingFile name="WarnLog" fileName="${LOG_HOME}/${WARN_FILE_NAME}.log"
filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM-dd}/${WARN_FILE_NAME}.%d{yyyy-MM-dd}.log"
append="true">
<!-- 输出格式 -->
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%t]%logger{36} - %msg%xEx%n" />
<!-- 设置策略 -->
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
<Filters>
<ThresholdFilter level="error"
onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="warn"
onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile>
<!-- Info console log -->
<RollingFile name="InfoLog" fileName="${LOG_HOME}/${INFO_FILE_NAME}.log"
filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM-dd}/${INFO_FILE_NAME}.%d{yyyy-MM-dd}.log"
append="true">
<!-- 输出格式 -->
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%t]%logger{36} - %msg%xEx%n" />
<!-- 设置策略 -->
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
<Filters>
<ThresholdFilter level="warn"
onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="info"
onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile>
<!-- Debug console log -->
<RollingFile name="DebugLog" fileName="${LOG_HOME}/${DEBUG_FILE_NAME}.log"
filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM-dd}/${DEBUG_FILE_NAME}.%d{yyyy-MM-dd}.log"
append="true">
<!-- 输出格式 -->
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%t]%logger{36} - %msg%xEx%n" />
<!-- 设置策略 -->
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
<Filters>
<ThresholdFilter level="info"
onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="debug"
onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile>
</appenders>
<!-- 注册日志输出对象 -->
<loggers>
<!-- 默认显示方式 -->
<!-- root节点用来指定项目的根日志 level=”info“ 表示低于info级别的日志不输出 -->
<!-- 如果突然想去掉一些低级别的日志,可以直接将标签 root 的属性 level 中的日志级别调高,而不需要改动其它的代码 -->
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="ErrLog" />
<appender-ref ref="WarnLog" />
<appender-ref ref="InfoLog" />
<appender-ref ref="DebugLog" />
</root>
</loggers>
</configuration>
|