<?xml version="1.0" encoding="UTF-8" ?>
<!--
<configuration>
<appender></appender> //存在1或多个,功能指定记录输出目的地
<root></root> //最多存在一个,根logger
<logger><logger> //存在1或多个,普通logger
</configuration>
-->
<configuration>
<!-- 从本地spring文件获取信息 获取项目名称 -->
<springProperty scope="context" name="PROJECT_NAME" source="spring.application.name"/>
<!-- 存储在文件中的打印日志 格式 -->
<property name="FILE_PATTEN"
value="[%level] [%date{ISO8601}] [%logger] [%thread] [%X{clientIp}] [%X{requestId}] [%X{serverIp}] [%X{X-B3-TraceId}] %msg%n"/>
<!-- 打印在控制台文件输出格式 -->
<property name="CONSOLE_PATTEN"
value="[%highlight(%-5level)] [%date{ISO8601}] [%boldGreen(%logger)] [%boldYellow(%thread)] [%X{clientIp}] [%cyan(%X{requestId})] [%X{serverIp}] %msg%n"/>
<!-- 日志打印在 控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_PATTEN}</pattern>
</encoder>
</appender>
<!--按照文件个数 和日志文件大小进行的回收策略 每天最多保留20个 每个最大100兆,最多保留一天-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.home}/logs/${PROJECT_NAME}/${PROJECT_NAME}.log</file>
<append>true</append>
<!--指定日志输出级别 到不同的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--文件超过100兆,新建一个日志文件,日志文件最多20个,每天清理一次 -->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!--设置以文件结尾zip表示压缩 -->
<fileNamePattern>${user.home}/logs/${PROJECT_NAME}/${PROJECT_NAME}.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<!--日志归档大小 -->
<maxFileSize>1kB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${FILE_PATTEN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--按照日志级别打印-->
<appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.home}/logs/${PROJECT_NAME}/error/${PROJECT_NAME}.log</file>
<append>true</append>
<!--指定日志输出级别 到不同的日志 可以自定义过滤器 输出 各种不同类型日志 如sql-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${user.home}/logs/${PROJECT_NAME}/${PROJECT_NAME}_error.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>1KB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${FILE_PATTEN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志按天压缩归档 根据设置的保留天数自动更新-->
<appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.home}/logs/${PROJECT_NAME}/info/${PROJECT_NAME}.log</file>
<append>true</append>
<!--指定日志输出级别 到不同的日志 可以自定义过滤器 输出 各种不同类型日志 如sql-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 生成按编号的认知 i%代表个数-->
<!--<fileNamePattern>${user.home}/logs/${PROJECT_NAME}/info/${PROJECT_NAME}-%d{yyyy-MM-dd}.%i.log-->
<fileNamePattern>${user.home}/logs/${PROJECT_NAME}/info/${PROJECT_NAME}-%d{yyyy-MM-dd}.%i.log.zip
</fileNamePattern>
<!-- 日志多大进行归档-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 保留的天数 -->
<MaxHistory>2</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_PATTEN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--指定打印到什么环境日志 设置打印日志级别 到控制台 和文件-->
<springProfile name="test">
<root level="DEBUG">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
<appender-ref ref="error_file"></appender-ref>
<appender-ref ref="info_file"></appender-ref>
</root>
</springProfile>
</configuration>