欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot 日志管理logback切换log4j2

程序员文章站 2022-05-24 15:42:59
...

springboot 日志管理logback切换log4j2

前言

早期项目中,使用log4j比较多,不过在微服务相较比较流行的前提下,大家都在使用springboot,springboot默认的日志管理是logback,所以没有特别的要求,springboot项目用的都是logback日志管理,由于性能原因,很多人想用log4j2替换logback,觉得logback的性能没有log4j2好,这个是有实验数据证明的,日志框架的对比图如下:
springboot 日志管理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相关的配置可以删除了,在自己的项目测试过是有效的,有疑问的话,可以评论,看到了会回复。

相关标签: log4j2