Skip to content

一、SkyWalking 集成 logback 日志框架

1.引入依赖包

xml
 <!-- https://mvnrepository.com/artifact/org.apache.skywalking/apm-toolkit-logback-1.x -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.12.0</version>
</dependency>

2.添加 logback-spring.xml 文件,并配置%tid占位符

2.1 控制台日志输出

xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!--定义日志文件的存储地址 -->
    <property name="APP_DIR" value="ep-system-start"/>
    <property name="LOG_HOME" value="/www/log"/>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!-- skywalking 添加 tid -->
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] %contextName [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 日志输出级别 -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
  • 重启服务后,可以看到控制台输出:

2.2 通过 gRPC 上报日志

gRPC报告程序可以将收集到的日志,转发到SkyWalking OAP服务器上。

xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!--定义日志文件的存储地址 -->
    <property name="APP_DIR" value="ep-system-start"/>
    <property name="LOG_HOME" value="/www/log"/>

    <!-- 控制台输出 -->
    <appender name="STDOUT" 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.mdc.TraceIdMDCPatternLogbackLayout">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] %contextName [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- grpc-log 上报到SkyWalking UI控制台 -->
    <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}] %contextName [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
            </layout>
        </encoder>
    </appender>


    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/${APP_DIR}.out</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/daily/${APP_DIR}.%d{yyyy-MM-dd}.gz</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>7</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别 -->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="grpc‐log"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>
  • 打开 agent/config/agent.config 配置文件,添加如下配置信息:
config
# 是否以格式化或未格式化的格式传输记录的数据 (默认值:true)
plugin.toolkit.log.transmit_formatted=true
# 指定要向其报告日志数据的grpc服务器的主机 (默认值: 127.0.0.1)
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1} 
# 指定要向其报告日志数据的grpc服务器的端口
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800} 
# 指定grpc客户端要报告的日志数据的最大大小
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760} 
# 客户端向上游发送数据时将超时多长时间。单位是秒
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
  • 重启服务后,可以看到控制台输出:

logback 官方配置