<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- AsyncLogger的错误解决方案:log4j2的AsyncLogger本身的逻辑采用了缓冲区思想,使用的是disruptor框架来实现一个环形无锁队列 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.1</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug" monitorInterval="30">
<appenders>
<!--这个输出控制台的配置-->
<Console name="STDOUT" >
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
<!-- 输出日志的格式-->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] - %msg%n" charset="UTF-8"/>
</Console>
<RollingRandomAccessFile name="FILE-INFO" fileName="logs/trace-info.log"
filePattern="$logs/trace-info.%d{yyyy-MM-dd-HH}.log">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n" charset="UTF-8" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="1" >
<Delete basePath="logs" maxDepth="2">
<IfFileName glob="*trace-info.*.log" />
<IfLastModified age="1d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="FILE-DEBUG" fileName="logs/trace-debug.log"
filePattern="logs/trace-debug.%d{yyyy-MM-dd-HH}.log">
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n" charset="UTF-8" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="1" >
<Delete basePath="logs" maxDepth="2">
<IfFileName glob="*trace-debug.*.log" />
<IfLastModified age="1d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="FILE-WARN" fileName="logs/trace-warn.log"
filePattern="logs/trace-warn.%d{yyyy-MM-dd-HH}.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n" charset="UTF-8" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="1" >
<Delete basePath="logs" maxDepth="2">
<IfFileName glob="*trace-warn.*.log" />
<IfLastModified age="1d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="FILE-ERROR" fileName="logs/trace-error.log"
filePattern="logs/trace-error.%d{yyyy-MM-dd-HH}.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n" charset="UTF-8" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="1" >
<Delete basePath="logs" maxDepth="2">
<IfFileName glob="*trace-error.*.log" />
<IfLastModified age="1d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</appenders>
<loggers>
<!-- 配置addtivity="true" 默认是true,标识向上级传递日志(INFO是DEBUG的上级)。只有显示指定为false时,才不会向上级输出 -->
<AsyncLogger level="DEBUG" name="com.chy.trace.dao" includeLocation="false" additivity="false">
<appender-ref ref="FILE-DEBUG" />
<appender-ref ref="STDOUT" />
</AsyncLogger>
<AsyncRoot level="INFO" includeLocation="true" >
<AppenderRef ref="FILE-INFO" />
<AppenderRef ref="FILE-WARN" />
<AppenderRef ref="FILE-ERROR" />
<AppenderRef ref="STDOUT" />
</AsyncRoot>
</loggers>
</configuration>