springboot 使用logback按業(yè)務(wù)進行日志分離

開發(fā)中,為了方便日志跟蹤,我們可能會需要對日志文件進行分離,比如按模塊分離,業(yè)務(wù)分離等等,方便上線后對問題進行跟蹤定位。

對于模塊間分離常常比較簡單,可以直接需要包路徑匹配進行區(qū)分。

但實際開發(fā)中,我們可能遇到一個問題,就是很多個業(yè)務(wù)的入口是相同的,此時無法根據(jù)包名區(qū)分,但還是希望對當(dāng)前消息的整個處理過程是在單獨的業(yè)務(wù)日志文件中,那么如何處理呢???

這里推薦使用MDC,進行處理。
比如:在消息接收的時候,首先判斷下消息的業(yè)務(wù)類型,再將要寫入的文件名放到MDC中。

MDC.put("logFileName","xxxx");

logback配置:

<appender name="INFO" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator>
            <key>logFileName</key>
            <defaultValue>custom</defaultValue>
        </discriminator>
        <sift>
            <appender name="FILE-${logFileName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <!-- 按天回滾 daily -->
                    <fileNamePattern>${log_dir}/${logFileName}/log-info-${logFileName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
                    <!-- 日志最大的歷史 30天 -->
                    <maxHistory>${maxHistory}</maxHistory>
                    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                        <!-- maxFileSize:這是活動文件的大小,默認(rèn)值是10MB,這里設(shè)置為500MB -->
                        <maxFileSize>${maxFileSize}</maxFileSize>
                    </timeBasedFileNamingAndTriggeringPolicy>
                </rollingPolicy>
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}| %C.%M | [%thread]|[%X{threadId}] |[%X{traceId}] | %highlight(%-5level) | %boldYellow(%thread) |
                        %boldGreen(%logger) | %msg%n
                    </pattern>
                </encoder>
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <!-- 只打印info日志 -->
                    <level>INFO</level>
                    <onMatch>ACCEPT</onMatch>
                    <onMismatch>DENY</onMismatch>
                </filter>
            </appender>
        </sift>
    </appender>

我們需要考慮當(dāng)MDC中沒有指定logFileName參數(shù)時,給出默認(rèn)值custom。
mdc保存在threadLocal中,所有當(dāng)前線程整個處理都會輸出到指定的log文件中,需要需要注意一點的是,mdc一定要注意清理哦??!在使用完成之后務(wù)必進行一次clear.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容