实现效果
本地环境、开发环境、测试环境系统业务输出DEBUG级别的日志,生产环境输出INFO级别的日志。日志输出分为控制台输出和日志文件输出。
具体实现
配置的logback-spring.xml日志文件内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<contextName>${applicationName}</contextName>
<!-- 日志存放路径 -->
<property name="log.path" value="logs/${applicationName}" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level traceId:[%X{traceId}] %logger{50} - %msg%n" />
<springProfile name="local">
<property name="LOG_LEVEL" value="INFO"/>
</springProfile>
<springProfile name="native,dev,test">
<property name="LOG_LEVEL" value="DEBUG"/>
</springProfile>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %-5level %boldYellow(traceId:)[%X{traceId}], %boldYellow(spanId:)[%X{spanId}] %logger{50} - %msg%n</pattern>
<charset>UTF8</charset>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 日志最大的历史 400天 -->
<maxHistory>400</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>${LOG_LEVEL}</level>
<!-- 匹配时的操作:接收(记录) -->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- 不匹配时的操作:拒绝(不记录) -->
<!-- <onMismatch>DENY</onMismatch>-->
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 日志最大的历史 400天 -->
<maxHistory>400</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.xxx" level="${LOG_LEVEL}"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>