Logback日志格式配置相關記錄


參考鏈接,http://www.logback.cn/

一、logback打印json格式到文件注意事項

1.用springboot默認的encoder

一定要對日志內容中的雙引號進行轉義,不然會破壞json的結構。
轉義方法 采用 %replace對雙引號進行轉義,參考下面的案例
{"systemName":"%property{systemName}" , "level": "%level", "time":"%d", "traceId": "%X{traceId}", "spanId": "%X{spanId}", 
"context": "%replace(%t [%c] - %m){'\"','\\\"'}" }%n
這里context里面的值進行了替換,把雙引號進行了轉義

     缺點:打印異常信息不方便,出現異常棧沒打印的情況

2. 用LoggingEventCompositeJsonEncoder

這個是比較好的方案,這個encoder是logstash實現的,可以用來輸出json
參考下面配置
 <encoder
                class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <!--<timestamp>-->
                    <!--<timeZone>UTC</timeZone>-->
                <!--</timestamp>-->
                <pattern>
                    <!--可以直接從apollo中取值-->
                    <pattern>
                        {"time":"%d{yyyy-MM-dd'T'HH:mm:ss.SSS+08:00}",
                        "systemName":"%property{systemName}" ,
                        "level": "%level",
                        "traceId": "%X{traceId}",
                        "spanId": "%X{spanId}",
                        "context": "%t [%c] - %m ",
                        "exceptionTrace":"%exception{50}"
                        }%n    --這個換行符,建議在輸出到文件時使用,如果直接輸出到logstash則不需要
                    </pattern>
                </pattern>
            </providers>
        </encoder>

二、logback從apollo中取值時注意事項

前提:springboot項目中
 (1) apollo配置中開啟eagerLoad
  用properties參考下面配置:
                   

    用yml參考下面配置(注意這里eagerLoad必須這樣子寫):
              
(2)logback配置文件建議用logback-spring.xml
(3)需要使用的方式從apollo中取值時,采用springProperty的方式,參考下面配置
<springProperty scope="context" name="JUUL_MAX_FILE_SIZE" source="JUUL_MAX_FILE_SIZE" defaultValue="1GB"/>

三、elk相關

 1.如果只是簡單配置,那么直接用LogstashEncoder即可

            <!--輸出到logstash的appender-->
            <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
                <!--可以訪問的logstash日志收集端口-->
                <destination>${logstashDestination:-192.168.200.50:5000}</destination>
                <keepAliveDuration>5 minutes</keepAliveDuration>
                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
                    <customFields>{"idx_pre": "${idx_pre}"}</customFields>
                    <timeZone>UTC</timeZone>
                </encoder>
            </appender>

2.如果想玩點花的,那么用LoggingEventCompositeJsonEncoder

            <appender name="LOGSTASH_THIRD_ACCESS" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
                <destination>${logstashDestination:-192.168.200.50:5000}</destination>
                <keepAliveDuration>5 minutes</keepAliveDuration>
                <!--輸出定制化格式的json時,用 LoggingEventCompositeJsonEncoder-->
                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                    <providers >
                        <pattern>
                            <pattern>
                                {
                                "idx_pre": "elk-original-third-access",
                                "json": "#asJson{%message}"  -- 這個asJson比較騷,可以把對應的字符串作為json對象取出來,這樣es可以對json里面的字段索引了
                                }
                            </pattern>
                        </pattern>
                    </providers>
                </encoder>
            </appender>


免責聲明!

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



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