3.4 日志采集-gRPC导出Logback日志

一、日志采集

  1. 方便系统排查错误以及日志信息筛选

  2. 引入坐标

    <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-toolkit-logback-1.x</artifactId>
        <version>8.15.0</version>
    </dependency>
  3. 添加相关配置:

    logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <springProperty name="appName" source="spring.application.name"/>
        <springProperty name="logFile" source="logging.file.name"/>
        <springProperty name="logLevel" source="logging.level.root" defaultValue="info"/>
        <springProperty name="maxFileSize" source="logging.file.max-size" defaultValue="500MB"/>
        <springProperty name="maxHistory" source="logging.file.max-history" defaultValue="60"/>
    
        <!-- 彩色日志格式 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
        <!-- 彩色日志依赖的渲染类 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
        <conversionRule conversionWord="wex"
                        converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
        <conversionRule conversionWord="wEx"
                        converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    
        <!--  默认输出到控制台  -->
        <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--  文件输出  -->
        <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>${maxFileSize}</maxFileSize>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
        </appender>
    
    
        <!--  skywalking 控制台输出  -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 日志的格式化 -->
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                    <Pattern>[%tid]-${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</Pattern>
                </layout>
            </encoder>
        </appender>
    
        <!--  skywalking 异步追加控制台输出  -->
        <appender name="async-console" class="ch.qos.logback.classic.AsyncAppender">
            <!-- 丢弃阈值,当队列满时是否丢弃日志事件 -->
            <discardingThreshold>0</discardingThreshold>
            <!-- 队列大小,决定可缓存的日志事件数量 -->
            <queueSize>1024</queueSize>
            <!-- 是否在队列已满时阻塞日志线程 -->
            <neverBlock>true</neverBlock>
            <!-- 是否包含调用者的信息 -->
            <includeCallerData>true</includeCallerData>
            <!-- 异步传递日志事件到名为"console"的附加器 -->
            <appender-ref ref="console"/>
        </appender>
    
        <!--  skywalking 服务端接-格式1  -->
        <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                    <Pattern>
                        {
                            "app_name": "${appName}",
                            "TID": "%X{tid}",
                            "time": "%date{yyyy-MM-dd HH:mm:ss.SSS}",
                            "level": "%level",
                            "thread": "%thread",
                            "class": "%class",
                            "method":"%method",
                            "line": "%line",
                            "message": "%message",
                            "stack_trace": "%exception"
                        }
                    </Pattern>
                </layout>
            </encoder>
        </appender>
    
        <!--  skywalking 服务端接-格式2  -->
    <!--    <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">-->
    <!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
    <!--            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">-->
    <!--                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>-->
    <!--            </layout>-->
    <!--        </encoder>-->
    <!--    </appender>-->
    
        <!--  不同环境使用不同的日志方案  -->
        <springProfile name="dev">
            <root level="${logLevel}">
                <!--  正常控制台输出  -->
    <!--            <appender-ref ref="consoleAppender"/>-->
                <!--  skywalking 控制台输出  -->
                <appender-ref ref="console"/>
                <!--  skywalking 接收  -->
                <appender-ref ref="grpc-log"/>
            </root>
        </springProfile>
    
        <springProfile name="pro">
            <root level="${logLevel}">
                <!--  文件输出  -->
    <!--            <appender-ref ref="fileAppender"/>-->
                <!--  skywalking 控制台输出  -->
                <appender-ref ref="console"/>
                <!--  skywalking 接收  -->
                <appender-ref ref="grpc-log"/>
            </root>
        </springProfile>
    
    </configuration>

    备注:为了区分,建议命名为logback-spring.xml

    然后再application.yml中进行配置:

Last updated