springboot 日志管理logback切换log4j2
前言
早期项目中,使用log4j比较多,不过在微服务相较比较流行的前提下,大家都在使用springboot,springboot默认的日志管理是logback,所以没有特别的要求,springboot项目用的都是logback日志管理,由于性能原因,很多人想用log4j2替换logback,觉得logback的性能没有log4j2好,这个是有实验数据证明的,日志框架的对比图如下:
从以上数据得到 log4j2 的性能明显是最好的,追求性能的项目就会将springboot默认的日志管理logback替换成log4j2。下面就说说替换的过程。
分两步,包引用替换,配置文件替换。
引用包替换
在springboot 中默认的日志管理就是logback,所以要换成log4j2,则需要剔除原来的日志包引用。
<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>
包切换之后呢,确定一下classpath下引用的包中是否还存在logback的包,还有spring-boot-starter-log4j2的包是否在classpath下。确保无误后再对改造配置文件。
配置文件替换
创建log4j2.xml文件,这个文件会自动扫描到项目中,也可以在yml文件配置。
log4j2.xml配置详情如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 第一全局参数信息 -->
<Properties>
<property name="LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} -- %style{[%t]}{bright,magenta} %highlight{%-5level}{ERROR=Bright RED, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White} %logger{36}.%M - %msg%n"/>
<!-- debug 日志文件位置及名称,在rollFile的时候老文件的生成规则 -->
<property name="DEBUG_FILE_PATH_ING" value="../logs/app_debug.log"/>
<property name="DEBUG_FILE_PATH_ED" value="../logs/app_debug-%d{yyyy-MM-dd}.%i.log"/>
<!-- info 日志文件位置及名称,在rollFile的时候老文件的生成规则 -->
<property name="INFO_FILE_PATH_ING" value="../logs/app_info.log"/>
<property name="INFO_FILE_PATH_ED" value="../logs/app_info-%d{yyyy-MM-dd}.%i.log"/>
<!-- error 日志文件位置及名称,在rollFile的时候老文件的生成规则 -->
<property name="ERROR_FILE_PATH_ING" value="../logs/app_error.log"/>
<property name="ERROR_FILE_PATH_ED" value="../logs/app_error-%d{yyyy-MM-dd}.%i.log"/>
<!-- warn 日志文件位置及名称,在rollFile的时候老文件的生成规则 -->
<property name="WARN_FILE_PATH_ING" value="../logs/warn_error.log"/>
<property name="WARN_FILE_PATH_ED" value="../logs/warn_error-%d{yyyy-MM-dd}.%i.log"/>
<!-- 日志文件最大文件大小全局配置,一天之内最大文件产生数量全局配置 -->
<property name="MAX_FILE_SIZE" value="100MB"/>
<property name="MAX_FILE_NUM" value="30"/>
</Properties>
<appenders>
<!-- 控制台输出日志信息 -->
<console name="Console_Log" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</console>
<!-- debug日志文件输出日志信息 -->
<RollingFile name="Debug_File" fileName="${DEBUG_FILE_PATH_ING}" filePattern="${DEBUG_FILE_PATH_ED}">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="${MAX_FILE_NUM}"/>
</RollingFile>
<!-- info日志文件输出日志信息 -->
<RollingFile name="Info_File" fileName="${INFO_FILE_PATH_ING}" filePattern="${INFO_FILE_PATH_ED}">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="${MAX_FILE_NUM}"/>
</RollingFile>
<!-- warn日志文件输出日志信息 -->
<RollingFile name="Warn_File" fileName="${ERROR_FILE_PATH_ING}" filePattern="${ERROR_FILE_PATH_ED}">
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="${MAX_FILE_NUM}"/>
</RollingFile>
<!-- error日志文件输出日志信息 -->
<RollingFile name="Error_File" fileName="${ERROR_FILE_PATH_ING}" filePattern="${ERROR_FILE_PATH_ED}">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="${MAX_FILE_NUM}"/>
</RollingFile>
</appenders>
<!--配置总的日志监听级别-->
<loggers>
<root level="DEBUG">
<appender-ref ref="Console_Log"/>
<appender-ref ref="Debug_File"/>
<appender-ref ref="Info_File"/>
<appender-ref ref="Error_File"/>
</root>
</loggers>
</configuration>
以上的就包含了console,debug,info,warn,error日志的输出,对于大部分的简单的日志输出是够用了,logback相关的配置可以删除了,在自己的项目测试过是有效的,有疑问的话,可以评论,看到了会回复。