logback配置included及時區設置問題

        在微服務裏使用了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區,即北京時間。

經過測試發現問題解決,文件裏顯示的也是實際時間了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章