在微服務裏使用了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區,即北京時間。
經過測試發現問題解決,文件裏顯示的也是實際時間了。