logback傳遞參數,講參數拼接到日志文件名上


springBoot配置logback:https://www.cnblogs.com/liufei2/p/16069903.html
指定某個類的日志輸出到指定文件中:https://www.cnblogs.com/liufei2/p/16069914.html

下面又來了?
我想傳遞個參數,根據這個參數,輸出到不同的文件中

方法一:環境變量

  <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./${project-id}-execution-detail-info.log</file>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

這個project-id變量,可以在環境變量中設定,但是一旦設定了,我們就不好改了。

方法二:MDC

詳細信息參考:https://logback.qos.ch/manual/mdc.html

    <appender name="EXECUTION_LOG" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator>
            <Key>project-id</Key>
            <DefaultValue>default</DefaultValue>
        </discriminator>
        <sift>
            <appender name="FILE" class="ch.qos.logback.core.FileAppender">
                <file>${LOG_HISTORY_PATH}/${project-id}-execution-detail-info.log</file>
                <Append>true</Append>
                <encoder>
                    <charset>UTF-8</charset>
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
                </encoder>
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>INFO</level>
                </filter>
            </appender>
        </sift>
    </appender>

測試代碼

 @GetMapping("/logTest")
 public String logTest() {
    String projectId = UUID.randomUUID().toString().substring(0, 8);
    MDC.put("project-id", projectId);
    logger.info("project-id={}, logTest success!", projectId);
    return "ok";
}

說明:

  • 這里無論單線程還是多線程,都是沒問題的
  • 如果不指定project-id,我們設置了默認值是default

測試驗證

@GetMapping
public String ping() {
    logger.info("ping success!");
    return "ok";
}

@GetMapping("/logTest")
public String logTest() {
    String projectId = UUID.randomUUID().toString().substring(0, 8);
    MDC.put("project-id", projectId);
    logger.info("project-id={}, logTest success!", projectId);
    return "ok";
}

ping方法,我們沒有指定project-id
調了三次,三次都寫到了project-id=default的文件下

logTest方法,也調三次
產生了三個日志文件,每個日志文件中,只有一次調用的日志記錄

這樣,我們就可以根據一些標志來收集日志
當然日志的收集方式很多,后面會再次介紹別的方式

參考文檔

https://logback.qos.ch/manual/configuration.html#variableSubstitution
https://blog.csdn.net/weixin_34122810/article/details/91915935?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM