SpringBoot集成Skywalking和logback.xml

本文介绍如何在项目中集成Skywalking进行日志监控,包括pom文件中添加依赖及logback.xml配置示例。
部署运行你感兴趣的模型镜像

pom文件添加Skywalking的jar

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.3.0</version>
</dependency>

logback.xml配置

日志输出格式设置:

<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%tid] - %msg%n"/>

日志输出设置:

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
        <pattern>${log.pattern}</pattern>
    </layout>
</encoder>

详细配置: 

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

    <!-- logback-spring加载早于application.yml,如果直接通过${参数key}的形式是无法获取到对应的参数值-->
    <!-- source指定的是application.yml配置文件中key,其它地方直接用${log.path}引用这个值 -->
    <!-- 解决在相对路径下生成log.path_IS_UNDEFINED的问题,增加defaultValue -->
    <springProperty scope="context" name="base.path" source="logging.file.path" defaultValue="${user.home}/logs"/>

    <!-- app.name根据你的应用名称修改 -->
    <springProperty scope="context" name="app.name" source="spring.application.name" defaultValue="applog"/>

    <property name="log.path" value="${base.path}/${app.name}"/>

    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%tid] - %msg%n"/>

    <!-- 控制台日志输出配置 -->
    <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.TraceIdPatternLogbackLayout">
                <pattern>${log.pattern}</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 文件输出日志配置,按照每天生成日志文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名称 -->
            <FileNamePattern>${log.path}-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志保留天数 -->
            <MaxHistory>30</MaxHistory>
            <MaxFileSize>3KB</MaxFileSize>
        </rollingPolicy>

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>${log.pattern}</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- mybatis日志配置 -->
    <!--    <logger name="java.sql.Connection" level="DEBUG"/>-->
    <!--    <logger name="java.sql.Statement" level="DEBUG"/>-->
    <!--    <logger name="java.sql.PreparedStatement" level="DEBUG"/>-->

    <!-- 配置开发环境,多个使用逗号隔开(例如:dev,sit) -->
    <springProfile name="dev">
        <!--定义日志输出级别-->
        <root level="INFO">
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

    <!-- 配置测试环境,多个使用逗号隔开 -->
    <springProfile name="sit">
        <!--定义日志输出级别-->
        <root level="INFO">
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

    <!-- 配置生产环境,多个使用逗号隔开 -->
    <springProfile name="prod">
        <!--定义日志输出级别-->
        <root level="INFO">
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

</configuration>

 

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

<think>首先,用户的问题是关于Spring Boot 3集成SkyWalking 9.X后,Logback日志未被采集的问题。用户需要我帮助排查原因并提供解决方案。 参考用户提供的引用: - 引用[1]:描述了Skywalking8.8的日志采集配置,包括Logback的appender设置。 - 引用[2]:提到SpringCloud for Alibaba集成SkyWalking,支持Logback日志框架。 - 引用[3]:讨论Spring Boot搭建SkyWalking9.X,用于监控请求链路。 虽然这些引用是关于较旧版本的,但核心概念应该类似。用户的问题是针对Spring Boot 3SkyWalking 9.X的,所以我需要基于这个上下文提供建议。 关键点: - 用户使用Spring Boot 3。 - SkyWalking 9.X。 - Logback作为日志框架。 - 日志未被采集到SkyWalking。 可能的原因: 1. **配置错误**:Logback的配置文件(如logback-spring.xml)可能没有正确设置SkyWalking的appender。 2. **依赖缺失**:缺少必要的SkyWalking依赖,如Java agent或Logback集成库。 3. **版本兼容性**:Spring Boot 3SkyWalking 9.X可能有兼容性问题。 4. **日志级别**:日志级别设置得太高,导致没有日志被记录。 5. **SkyWalking服务问题**:SkyWalking OAP服务器或collector可能没有运行或配置错误。 6. **网络问题**:日志无法发送到SkyWalking服务器。 7. **日志模式问题**:日志模式中可能缺少必要的trace ID。 从引用[1]中,配置Logback采集的示例是: ```xml <property name="APM_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n" /> <appender name="APM_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>${APM_PATTERN}</Pattern> </layout> </encoder> </appender> ``` 然后需要将这个appender添加到root logger中。 在Spring Boot 3中,事情可能有所不同,因为Spring Boot 3使用Jakarta EE而不是Java EE,这可能会影响依赖。 解决方案步骤: 1. **确保SkyWalking Java Agent正确配置**:在启动应用时,需要添加Java agent参数,如`-javaagent:/path/to/skywalking-agent.jar`。 2. **添加必要的依赖**:在pom.xml或build.gradle中,添加SkyWalkingLogback集成依赖。 - 对于SkyWalking 9.X,依赖可能是`apm-toolkit-logback-1.x`或类似。 3. **配置Logback**:在`logback-spring.xml`中,添加SkyWalking的appender,并确保它被引用。 4. **检查日志模式**:确保日志模式包括trace ID,如`%X{tid}`或`%X{traceId}`,因为SkyWalking依赖这个来关联日志trace。 5. **验证SkyWalking服务器**:确保OAP服务器UI正在运行,并且配置正确。 6. **调试日志**:启用SkyWalking agent的调试日志来查看问题。 具体建议: - **依赖**:添加SkyWalking toolkit for Logback。在Maven中: ```xml <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>9.0.0</version> <!-- 使用匹配的版本 --> </dependency> ``` - **Logback配置**:创建或修改`src/main/resources/logback-spring.xml`: ```xml <configuration> <property name="APM_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n" /> <appender name="APM_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>${APM_PATTERN}</Pattern> </layout> </encoder> </appender> <root level="INFO"> <appender-ref ref="APM_LOG" /> <!-- 其他appenders如CONSOLE --> </root> </configuration> ``` - **启动参数**:确保应用启动时添加了Java agent,例如: ``` -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name ``` - **检查Trace ID**:在日志中,确保`%X{tid}`或`%X{traceId}`被正确输出。在Spring Boot 3中,可能需要适配。 如果问题仍然存在,检查: - SkyWalking agent的日志是否有错误。 - 网络连接:确保应用可以访问SkyWalking OAP服务器。 - 版本兼容性:确认SkyWalking 9.X支持Spring Boot 3。 最后,生成相关问题以扩展讨论。</think>### Spring Boot 3集成SkyWalking 9.X后Logback日志未被采集的排查与解决方案 在Spring Boot 3中集成SkyWalking 9.X时,Logback日志未被采集的常见原因包括配置错误、依赖缺失或版本兼容性问题。以下是逐步排查解决方案,基于SkyWalking日志采集原理Spring Boot 3特性。 #### 1. **确认基础依赖配置** - **添加SkyWalking Java Agent**: 在启动应用时,必须通过`-javaagent`参数加载SkyWalking agent。检查启动命令是否包含: ```bash java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -jar your-app.jar ``` - 确保`skywalking-agent.jar`版本为9.X(如9.0.0+)。 - 验证`agent/config/agent.config`文件中的`collector.backend_service`指向正确的SkyWalking OAP服务器地址[^3]。 - **添加Logback工具包依赖**: 在`pom.xml`中添加SkyWalkingLogback集成依赖(Spring Boot 3需使用兼容版本): ```xml <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>9.0.0</version> <!-- 匹配SkyWalking 9.X --> </dependency> ``` - 如果使用Gradle,添加等效依赖。 - **注意**:Spring Boot 3基于Jakarta EE,确保依赖兼容(避免旧版Java EE冲突)[^2]。 #### 2. **检查Logback配置文件** - **正确配置AppenderPattern**: 在`src/main/resources/logback-spring.xml`中,添加SkyWalking的GRPC appender。示例配置: ```xml <configuration> <!-- 定义日志模式,包含trace ID [%X{tid}] --> <property name="APM_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n" /> <!-- SkyWalking日志采集Appender --> <appender name="APM_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>${APM_PATTERN}</Pattern> </layout> </encoder> </appender> <!-- 将Appender添加到Root Logger --> <root level="INFO"> <appender-ref ref="APM_LOG" /> <!-- 确保引用APM_LOG --> <!-- 其他Appender如CONSOLE --> </root> </configuration> ``` - **关键点**: - 模式`[%X{tid}]`用于注入trace ID,这是SkyWalking关联日志链路的关键[^1]。 - 如果日志未显示`[tid]`,说明trace ID未被注入,需检查MDC配置。 - **验证配置加载**: 启动应用时检查日志,确认`logback-spring.xml`被加载。如未生效,尝试重命名为`logback.xml`。 #### 3. **排查常见问题** - **Trace ID缺失问题**: - Spring Boot 3可能需额外配置MDC(Mapped Diagnostic Context)。在`application.properties`中添加: ```properties spring.sleuth.enabled=true spring.sleuth.trace-id128=true # 确保trace ID为128位 ``` - 如果使用Spring Cloud Sleuth,确保版本兼容(Spring Boot 3需Sleuth 3.1.0+)。 - **网络服务器问题**: - 检查SkyWalking OAP服务器状态:访问`http://<oap-server>:12800`验证是否运行。 - 测试网络连通性:确保应用服务器能访问OAP的gRPC端口(默认11800)。 - 在`agent/config/agent.config`中启用调试日志: ```properties logging.level=DEBUG ``` - **日志级别过滤**: - 确保Root Logger级别为`INFO`或更低(如`DEBUG`)。如果设置为`ERROR`,部分日志可能未被采集。 - 检查是否有过滤器屏蔽了日志,例如在`logback-spring.xml`中误删`<appender-ref ref="APM_LOG"/>`。 #### 4. **验证测试** - **本地验证步骤**: 1. 生成测试日志:在Controller中添加日志语句,如`logger.info("Test SkyWalking log")`。 2. 检查控制台输出:确认日志中包含`[tid]`(例如`[3a4b5c6d7e8f]`)。 3. 登录SkyWalking UI:在"Log"面板搜索服务名,查看日志是否上报。 - **调试工具**: - 启用SkyWalking agent的详细日志:在JVM参数中添加`-Dskywalking.logging.level=DEBUG`。 - 检查`logs/skywalking-api.log`文件,定位连接错误或序列化失败。 #### 5. **解决方案总结** - **成功场景**:日志采集正常后,SkyWalking UI将显示带trace ID的日志,支持链路追踪[^3]。 - **失败回退**: - 降级SkyWalking版本:临时使用SkyWalking 8.8(兼容Spring Boot 2.X),但需调整依赖。 - 替代方案:使用Filebeat或Logstash将日志文件转发到SkyWalking。 - **最佳实践**: - 使用Spring Boot 3时,优先选择SkyWalking 9.1.0+(优化了Jakarta EE兼容性)。 - 定期更新`apm-toolkit-logback-1.x`依赖,避免版本冲突。 如果以上步骤仍无效,提供Agent日志片段,可进一步分析具体错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值