SpringBoot使用Log4J2

一、常用日志框架
Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。
LogBack:是Log4j的一个改良版本
Log4j2:Log4j2已经不仅仅是Log4j的一个升级版本了,它从头到尾都被重写了
性能对比如下:log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了,logback和log4j之前的队列. 并发性能大大提升。
  <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
 
二、spring boot使用log4j2
2.1 springboot默认是用logback的日志框架的,所以需要排除logback,不然会出现jar依赖冲突的报错
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <exclusions><!-- 去掉springboot默认配置 -->  
        <exclusion>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-logging</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency> 

<dependency> <!-- 引入log4j2依赖 -->  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-log4j2</artifactId>  
</dependency> 

2.2 log4j2配置

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 主要配置为error日志与debug日志分别打印文件,errorLog按照分钟存档,debugLog按照日志文件大小存档,最多保存10个。 -->
<!-- 日志打印状态为debug, monitorInterval是用来设置配置文件的动态加载时间的,每30秒配置文件会动态加载一次,修改配置30秒会生效-->
<configuration status="debug" monitorInterval="30"> 
    <Properties>
        <!-- baseLogDir变量名,日志存储路径。logPattern日志打印路径 -->
        <property name="baseLogDir">./app/log</property>
        <!-- 格式化输出:%d格式化日期,%-5level:级别从左显示5个字符宽度,%thread表示线程名,%msg:日志消息,%n是换行符 -->
        <property name="logPattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%logger{0}:%line][%thread] %X{logger_id} - [TID: %X{EagleEye-TraceID}] %msg%n</property>
    </Properties>
        
    <Appenders>
        <!--Appender 1. console输出DEBUG级别以上日志,指定输出格式和过滤器等级为DEBUG -->
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${logPattern}"/>
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>
        
        <!--Appender 2. INFO日志保存到app.log文件,日志留3天 -->
        <RollingFile name="business" fileName="${baseLogDir}/app.log"
                     filePattern="${baseLogDir}/app.log.%d{yyyy-MM-dd}">
            <PatternLayout pattern="${logPattern}"/>
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${baseLogDir}" maxDepth="2">
                    <IfFileName glob="app.log.20*" />
                    <IfLastModified age="3d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        
        <!--Appender 3. DEBUG日志保存到debug.log文件,日志留3天 -->
        <RollingFile name="debug" fileName="${baseLogDir}/debug.log"
                     filePattern="${baseLogDir}/debug.log.%d{yyyy-MM-dd}">
            <PatternLayout pattern="${logPattern}"/>
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${baseLogDir}" maxDepth="2">
                    <IfFileName glob="debug.log.20*" />
                    <IfLastModified age="3d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        
        <!--Appender 4. ERROR日志保存到error.log文件,日志留3天 -->
        <RollingFile name="error" fileName="${baseLogDir}/error.log"
                     filePattern="${baseLogDir}/error.log.%d{yyyy-MM-dd}">
            <PatternLayout pattern="${logPattern}"/>
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${baseLogDir}" maxDepth="2">
                    <IfFileName glob="error.log.20*" />
                    <IfLastModified age="3d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders> 

    <Loggers>
        <AsyncRoot level="info" includeLocation="true">
            <AppenderRef ref="console"/>
            <AppenderRef ref="business"/>
            <AppenderRef ref="debug"/>
            <AppenderRef ref="error"/>
        </AsyncRoot>
    </Loggers>
</configuration>

 

 

 

 

 

posted @ 2022-08-17 17:23  黑水滴  阅读(3150)  评论(0编辑  收藏  举报