org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2 com.lmax disruptor 3.3.6

XML 配置 resources/log4j2.xml

  • 混合 sync/async
  • 分类输出到不同文件
  • 自动压缩日志文件并归档
  • <?xml version="1.0" encoding="UTF-8"?>
    <!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
         你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
         30s 刷新此配置
    <configuration status="WARN" monitorInterval="30">
        <!-- 日志文件目录、压缩文件目录、日志格式配置 -->
        <properties>
            <Property name="fileName">/Users/admin/Code/log</Property>
            <Property name="fileGz">/Users/admin/Code/log/7z</Property>
            <Property name="PID">????</Property>
            <Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
        </properties>
        <Appenders>
            <!-- 输出控制台日志的配置 -->
            <Console name="console" target="SYSTEM_OUT">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
                <!-- 输出日志的格式 -->
                <PatternLayout pattern="${LOG_PATTERN}"/>
            </Console>
            <!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
            <RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
                                        filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-info.gz">
                <PatternLayout pattern="${LOG_PATTERN}"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size="20 MB"/>
                </Policies>
                <Filters>
                    <!-- 只记录info和warn级别信息 -->
                    <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                    <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
                <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
                <DefaultRolloverStrategy max="50"/>
            </RollingRandomAccessFile>
            <!-- 存储所有error信息 -->
            <RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
                                        filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-error.gz">
                <PatternLayout pattern="${LOG_PATTERN}"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size="50 MB"/>
                </Policies>
                <Filters>
                    <!-- 只记录error级别信息 -->
                    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
                <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
                <DefaultRolloverStrategy max="50"/>
            </RollingRandomAccessFile>
        </Appenders>
        <!-- Mixed sync/async -->
        <Loggers>
            <Root level="debug" includeLocation="true">
                <AppenderRef ref="console"/>
                <AppenderRef ref="infoFile"/>
                <AppenderRef ref="errorFile"/>
            </Root>
            <AsyncRoot level="debug" includeLocation="true">
                <AppenderRef ref="console"/>
                <AppenderRef ref="infoFile"/>
                <AppenderRef ref="errorFile"/>
            </AsyncRoot>
        </Loggers>
    </configuration>
    

    最终效果如下: