SpringBoot3项目集成Skywalking示例

windows部署Skywalking教程请看:Windows11部署SkyWalking-CSDN博客

一、添加依赖

XML 复制代码
        <!-- SkyWalking Java Agent -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>9.0.0</version>
        </dependency>

二、修改日志文件配置

将原来每个appender节点下的encoder节点注释,改成如下skywalking自定义类的格式类

复制代码
org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout
XML 复制代码
<!--    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">-->
<!--            <pattern>${CONSOLE_LOG_PATTERN}</pattern>-->
<!--    </encoder>-->
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>

修改完后的日志文件logback-spring.xml如下。

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <springProperty scope="context" name="applicationName"
                    source="spring.application.name" defaultValue="goods-service"/>
    <!-- 单个日志文件的最大,尺寸 -->
    <springProperty scope="context" name="maxFileSize"
                    source="logging.file.max-size" defaultValue="10MB"/>
    <!-- 日志保留时长 (天) -->
    <springProperty scope="context" name="maxHistory"
                    source="logging.file.max-history" defaultValue="30"/>
    <!-- 日志文件路径 -->
    <springProperty scope="context" name="logDir"
                    source="logging.path" defaultValue="./logs"/>

    <contextName>${applicationName}</contextName>

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>

    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }) %clr(---){faint} %clr([%10t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>


    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">-->
<!--            <pattern>${CONSOLE_LOG_PATTERN}</pattern>-->
<!--        </encoder>-->
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>

    </appender>

    <!-- info日志 appender  -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${logDir}/info-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 日志最大的历史 180天 -->
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,这里设置为20MB -->
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--        </encoder>-->
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 只打印info日志 -->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- DEBUG日志 appender  -->
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${logDir}/debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 日志最大的历史 180天 -->
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,这里设置为20MB -->
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--        </encoder>-->
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 只打印DEBUG日志 -->
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- WARN日志 appender  -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${logDir}/warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 日志最大的历史 180天 -->
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,这里设置为20MB -->
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--        </encoder>-->
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 只打印WARN日志 -->
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error 日志 appender  -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${logDir}/error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 日志最大的历史 180天 -->
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,这里设置为20MB -->
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--        </encoder>-->
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 只打印错误日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--  开发环境,日志输出到控制台  -->
    <springProfile name="dev">
        <!--控制台和日志文件输出级别-->
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

    <!--  生产环境/测试环境,日志输出到文件  -->
    <springProfile name="prod|test">
        <root level="INFO">
            <appender-ref ref="INFO"/>
            <appender-ref ref="ERROR"/>
<!--            <appender-ref ref="DEBUG"/>-->
            <appender-ref ref="WARN"/>
            <appender-ref ref="SW_APPENDER"/>
        </root>
    </springProfile>

</configuration>

三、启动设置环境变量

3.1、在启动时指定环境变量参数及值

bash 复制代码
-javaagent:D:\tools\apache-skywalking-java-agent-9.0.0\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=goods-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
-Dskywalking.logging.level=INFO

3.2、环境变量解释

|--------------------------------------------------------------------------------------------------|--------------------------|
| 参数 | 描述 |
| -javaagent:D:\tools\apache-skywalking-java-agent-9.0.0\skywalking-agent\skywalking-agent.jar | 指定启动探针jar包地址 |
| -Dskywalking.agent.service_name=goods-service | 指定skywalking里代理服务名称 |
| -Dskywalking.collector.backend_service=127.0.0.1:11800 | 指定skywalking收集器的服务IP与端口号 |
| -Dskywalking.logging.level=INFO | 指定日志级别 |

学习下并模拟JavaAgent探针-CSDN博客文章摘要:Javaagent是一种通过-javaagent参数在JVM启动时加载的代理工具,能够在main方法执行前拦截类加载并修改字节码。实现步骤包括:1)创建包含Premain-Class的MANIFEST.MF文件;2)编写实现premain方法的代理类;3)使用ClassFileTransformer接口和Javassist等工具修改目标类。示例演示了如何统计方法耗时:通过代理jar包在SpringBoot应用启动时植入监控代码,最终在控制台输出各方法执行时间。https://blog.csdn.net/u010132847/article/details/162975662?spm=1011.2415.3001.5331

四、启动项目查看效果

4.1、项目启动会优先初始化加载Skywalking文件,然后出现如下字样

INFO 2026-07-17 11:03:06.943 main SkyWalkingAgent : Skywalking agent begin to install transformer ...

浏览器访问skywalking(之前端口没改默认是8080端口)地址http://localhost:8080,

新开浏览器访问几次该项目下的web接口后,再次查看该界面里的Trace面板,看到被记录的请求及TraceId。

项目日志里也出现了TID(TraceId)。

相关推荐
乒乓狂魔2 天前
SkyWalking 也能 AI 智能化了
人工智能·skywalking
摇滚侠9 天前
Skywalking 应用性能监控和可观测性分析平台 简介
skywalking
Databuff9 天前
skywalking 快速使用入门
skywalking
摇滚侠11 天前
Apache Skywalking 实战 阅读笔记 第三章
笔记·apache·skywalking
摇滚侠12 天前
Apache Skywalking 实战 阅读笔记 第二章
笔记·apache·skywalking
Databuff12 天前
国产开源APM databuff 成为 CNCF 顶级项目opentelemetry 官宣Vendor
运维·开源·skywalking·apm·可观测性·opentelemetry
摇滚侠13 天前
Skywalking 全套教程 环境搭建 01-05
skywalking
摇滚侠13 天前
Apache Skywalking 实战 阅读笔记 第一章
笔记·apache·skywalking
就改了1 个月前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking