• 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>

    作者:zeng1994
    出处:http://www.cnblogs.com/zeng1994/
    本文版权归作者和博客园共有,欢迎转载!但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!

  • 相关阅读:
    Win7 vs2017 WDK 1803 1809 驱动开发 出错 KMDF
    http 请求 post get 长度限制
    IO模式和IO多路复用(阻塞IO、非阻塞IO、同步IO、异步IO等概念)
    select/poll 和 epoll 比较
    centos查看端口被哪个应用端口占用命令
    mysql索引知识简单记录
    Spring钩子方法和钩子接口的使用详解
    mysql使用自增Id为什么存储比较快
    分布式Id教程
    如何配置JVM系统属性及获取方式System.getProperty("pname")
  • 原文地址:https://www.cnblogs.com/zeng1994/p/1913efb3c933012d18e1ab302ecc84c5.html
Copyright © 2020-2023  润新知