日志配置的一些思考
日志配置的一些思考
- 背景
- 说明
- 基础配置抽取
- 子服务扩展配置
背景
基本所有的系统都需要完善的日志配置, 这里是一些常用的配置. 但是没有本地验证, 只能提供一份配置思路.
说明
不可直接用, 会报错, 提供一种配置思路.
不可直接用, 会报错, 提供一种配置思路.
不可直接用, 会报错, 提供一种配置思路.
基础配置抽取
这里是抽取的基础日志: basic-logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<included>
<property name="pattern" value="%date %level [%thread] %logger{10} [%file : %line] %msg%n"/>
<appender name="spring" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/spring.log</file>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}/spring.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>300M</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="accessAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/access.log</file>
<encoder>
<pattern>%date --- %level --- [%X{X-B3-TraceId}, %X{X-B3-SpanId}, %X{X-Span-Export}] --- [%thread] --- %logger{10} --- [%file : %line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}/access.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>300M</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="warnError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/warn_error.log</file>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
<!-- 自定义过滤器 -->
<filter class="com.xxx.xxx.xx.ExceptionThresholdFiler">
<level>WARN</level>
<exceptionClazz>com.xxx.xxx.xxx.BusinessException</exceptionClazz>
<onMatch>EDNY</onMatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}/warn_error.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>300M</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="businessError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/business_error.log</file>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
<!-- 自定义过滤器 -->
<filter class="com.xxx.xxx.xx.ExceptionThresholdFiler">
<level>WARN</level>
<exceptionClazz>com.xxx.xxx.xxx.BusinessException</exceptionClazz>
<onMatch>EDNY</onMatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}/business_error.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>300M</maxFileSize>
</triggeringPolicy>
</appender>
<!-- 自定义Logger -->
<logger name="com.xxx.xxx.xxx.AccessLogRecorder" level="info" additivity="false">
<appender-ref ref="accessAppender"/>
</logger>
<root level="info">
<appender-ref ref="spring"/>
<appender-ref ref="warnError"/>
<appender-ref ref="businessError"/>
</root>
</included>
子服务扩展配置
子服务配置: servie1-logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="3 seconds">
<!-- dev环境生效 -->
<springProfile name="dev">
<property name="LOG_HOME" value="./logs"/>
</springProfile>
<!-- 非dev环境生效 -->
<springProfile name="!dev">
<property name="LOG_HOME" value="${logging.path}"/>
</springProfile>
<!-- 外部公共配置 -->
<include resource="basic-logback.xml"></include>
<appender name="xxxxxService" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/service.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}/service/service.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<logger name="com.xxx.xxx" level="info" additivity="true">
<appender-ref ref="xxxxxService"></appender-ref>
</logger>
<springProfile name="dev">
<root>
<appender-ref ref="console"/>
</root>
</springProfile>
</configuration>