在微服务里使用了logback来对日志输出进行配置,由于配置文件里有很多通用的设置,所以有必要将通用的都提取到一个公共文件里,这样所有的微服务更改配置格式的话,只需更新通用文件即可,不用每个地方都改一遍了。
如果一个logback.xml文件想在其他的项目中被引用,那么就需要用iucluded标签,将定义的appender跟logger包围起来,表示这个是可以被导入其他项目的。
下面的是通用配置文件:logback-common.xml
<?xml version="1.0" encoding="UTF-8" ?>
<included>
<!-- 控制台日志输出-->
<appender name="${CONSOLE_APPENDER}" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
[%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n
</pattern>
</layout>
</appender>
<!--日志文件-->
<appender name="${FILE_INFO_APPENDER}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--过滤-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>
[%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_DIR}/${LOG_SERVICE_NAME}-info.%d.log</fileNamePattern>
<maxHistory>${LOG_HIS_MAX}</maxHistory>
<!-- <maxFileSize>${LOG_FILE_SIZE_MAX}</maxFileSize>-->
<totalSizeCap>${LOG_TOTAL_SIZE}</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<appender name="${FILE_ERROR_APPENDER}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--过滤-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
[%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n
</pattern>
</layout>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_DIR}/${LOG_SERVICE_NAME}-error.%d.log</fileNamePattern>
<maxHistory>${LOG_HIS_MAX}</maxHistory>
<!-- <maxFileSize>${LOG_FILE_SIZE_MAX}</maxFileSize>-->
<totalSizeCap>${LOG_TOTAL_SIZE}</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<springProfile name="dev">
<root level="info">
<appender-ref ref="${CONSOLE_APPENDER}"/>
<appender-ref ref="${FILE_INFO_APPENDER}"/>
<appender-ref ref="${FILE_ERROR_APPENDER}"/>
</root>
</springProfile>
<springProfile name="uat">
<root level="error">
<appender-ref ref="${CONSOLE_APPENDER}"/>
<appender-ref ref="${FILE_INFO_APPENDER}"/>
<appender-ref ref="${FILE_ERROR_APPENDER}"/>
</root>
</springProfile>
</included>
下面的是每个微服务自己的配置文件:logback-spring.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--微服务名的简称-->
<property scope="local" name="LOG_SERVICE_NAME" value="demo" />
<!--日志存储目录-->
<property scope="local" name="LOG_DIR" value="/data/log" />
<!--保留多少天的日志-->
<property scope="local" name="LOG_HIS_MAX" value="10" />
<property scope="local" name="LOG_TOTAL_SIZE" value="2GB" />
<property scope="local" name="CONSOLE_APPENDER" value="consoleLog" />
<property scope="local" name="FILE_INFO_APPENDER" value="fileInfoLog" />
<property scope="local" name="FILE_ERROR_APPENDER" value="fileErrorLog" />
<include resource="logback-common.xml"/>
</configuration>
在测试过程中出现了一个问题,就是控制台输出的日志时间是正常的,但在日志文件里输出的日志时间和实际时间相差了8个小时,判断是logback的配置文件还需要加上时区,如下:
<pattern>
[%d{yyyy-MM-dd HH:mm:ss.SSS,GMT+8}] %-5level [%t] [%c] - %msg%n
</pattern>
在时间格式后面增加了 GMT+8,表示输出的日志时区设定为东8区,即北京时间。
经过测试发现问题解决,文件里显示的也是实际时间了。