为什么选用Log4j2
spring-boot 项目中已经默认为我们集成了slf4j 和 logback。
Log4j2作为后起之秀,自然是借鉴了其他日志框架的优缺点。它相比与其他的日志系统,log4j2丢数据这种情况少;因为使用了disruptor技术,所以Log4j2在多线程环境下,性能高于logback等10倍以上;并且利用jdk1.5并发的特性,减少了死锁的发生。
整合步骤
导入依赖
springboot默认是用logback的日志框架的,所以需要排除logback,不然会出现jar依赖冲突的报错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.4</version> </dependency>
|
修改配置文件
如果自定义了文件名,需要在application.yml中配置
1 2 3 4
| logging: config: xxxx.xml level: cn.jay.repository: trace
|
默认名log4j2-spring.xml,就省下了在application.yml中配置
配置文件模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| <?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="5">
<Properties> <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight{ %-5level }{FATAL=white, ERROR=red, WARN=Yellow, INFO=Green, DEBUG=Blue, TRACE=blue} ---- [%thread] %style{%-50.50logger{5.}}{Cyan} - %msg%n" /> <property name="FILE_PATH" value="/tmp/log" /> <property name="FILE_NAME" value="spring-demo" /> </Properties>
<appenders>
<console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${LOG_PATTERN}"/> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </console>
<File name="FileLog" fileName="${FILE_PATH}/test.log" append="false"> <PatternLayout pattern="${LOG_PATTERN}"/> </File>
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <DefaultRolloverStrategy max="15"/> </RollingFile>
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <DefaultRolloverStrategy max="15"/> </RollingFile>
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <DefaultRolloverStrategy max="15"/> </RollingFile>
</appenders>
<loggers>
<AsyncLogger name="org.mybatis" level="info" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger> <AsyncLogger name="org.springframework" level="info" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger>
<Asyncroot level="info"> <appender-ref ref="Console"/> </Asyncroot> </loggers>
</configuration>
|
简化模板
简化模板中只有Console输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="5">
<Properties> <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight{ %-5level }{FATAL=white, ERROR=red, WARN=Yellow, INFO=Green, DEBUG=Blue, TRACE=blue} ---- [%thread] %style{%-50.50logger{5.}}{Cyan} - %msg%n" /> </Properties>
<appenders>
<console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${LOG_PATTERN}"/> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> </console>
</appenders>
<loggers> <AsyncLogger name="org.mybatis" level="info" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger>
<AsyncLogger name="org.springframework" level="info" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger>
<AsyncLogger name="icu.xiaobai" level="debug" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger>
<Asyncroot level="info"> <appender-ref ref="Console"/> </Asyncroot> </loggers>
</configuration>
|
yml 配置
在springboot 中使用log4j2.yml配置文件的时候,需要导入如下的依赖,才能解析yaml/yml文件
1 2 3 4 5
| <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Configuration: name: Log4j2Test properties: property: name: LOG_PATTERN value: "%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight{ %-5level }{FATAL=white, ERROR=red, WARN=Yellow, INFO=Green, DEBUG=Blue, TRACE=blue} ---- [%thread] %style{%-50.50logger{5.}}{Cyan} - %msg%n" appenders: Console: name: Console target: SYSTEM_OUT PatternLayout: Pattern: ${LOG_PATTERN}
Loggers: AsyncLogger: - name: org.mybatis level: info additivity: false AppenderRef: ref: Console - name: org.springframework level: info additivity: false AppenderRef: ref: Console - name: icu.xiaobai level: debug additivity: false AppenderRef: ref: Console Root: level: info AppenderRef: ref: Console
|
注意
以上配置能够在Linux和Mac上正常打印彩色日志。但是在Windows平台上,彩色日志失效,需要在VM Options中添加-Dlog4j.skipJansi=false参数,启用彩色日志。