详解Skywalking 采集springboot 应用日志的方法(内附源码)

大家都知道Skywalking 的链路追踪功能非常强大,可以帮助用户深入了解应用程序中各个组件之间的依赖关系。在实际应用中,往往需要将链路追踪数据与日志数据结合起来进行综合分析。Skywalking 提供了 Trace Log 结合插件,可以帮助用户快速定位问题。Skywalking 支持多种日志采集方式,包括 Log4j、SLF4J、Logback 等常见的 Java 日志框架。此外,还支持通过 TCP、UDP、HTTP 等协议传输日志数据。用户可以根据实际需求选择合适的采集方式和传输协议。本文以Skywalking 采集Log4j 2 日志为例,给大家演示完整的日志采集的配置过程。

Skywalking 采集springboot 应用日志

skywalking 版本9.3.0

Pom.xml 配置

复制代码
<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter</artifactId>

   <exclusions><!---特别重要 特别重要 特别重要 SpringBoot 默认携带自身的 log 日志功能,去掉默认配置 -->

      <exclusion>

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter-logging</artifactId>

      </exclusion>

   </exclusions>

</dependency>

<dependency> <!-- 引入log4j2依赖 -->

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-log4j2</artifactId>

</dependency>

<dependency>

      <groupId>org.apache.skywalking</groupId>

      <artifactId>apm-toolkit-log4j-2.x</artifactId>

      <version>9.1.0</version>

</dependency>

        

<dependency>

      <groupId>org.apache.skywalking</groupId>

      <artifactId>apm-toolkit-trace</artifactId>

      <version>9.1.0</version>

 </dependency>

在src\main\resources 根目录下创建文件log4j2.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="INFO">

    <Appenders>

         <!-- 控制台输出 -->

        <Console name="Console" target="SYSTEM_OUT">

            <PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>

        </Console>

         <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->

         <GRPCLogClientAppender name="grpc-log">

            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

        </GRPCLogClientAppender>

    </Appenders>

     <Loggers>

        <Root level="INFO">

            <AppenderRef ref="Console"/>

            <AppenderRef ref="grpc-log"/>

        </Root>

    </Loggers>

</Configuration>

在上面的配置文件中

%traceId 代表traceid的值

其他PatternLayout 的常见参数含义如下:

%r : 程序从开始之后跑的时间

%t : 发出日志请求的线程

%-10p : 日志level,"-"号为向左对齐,10为显示的长度

%c : logger的名字,通常就是所在类的全名,后面加上{2}可指定只输出的全名的最后两个

%m : 日志信息

%n : 换行

%d : 日期

%l : 位置

%L: 输出代码中的行号

%X{variableName} : 输出和当前线程相关联的NDC(嵌套诊断环境),{指定变量名输出}

代码中只需要正常使用log4j2的api 写代码即可,

复制代码
import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;

import org.apache.skywalking.apm.toolkit.trace.TraceContext;

import org.slf4j.Logger;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;


@RestController

public class HelloWorld {

private static final Logger logger = org.slf4j.LoggerFactory.getLogger(HelloWorld.class );

@GetMapping("/kevin")

public String helloworld(){

   
    logger.info("*****info*****: call helloworld");

    return "Hello World ";


    }



@GetMapping("/kevin/login")

 public String login(@RequestParam(value="name",required=true) String name, @RequestParam(value="password",required=true) String pwd){
        

    logger.info("*****info*****: call login");

    try {

        Thread.sleep(3000);

    } catch (InterruptedException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }


    return name+" "+pwd;


    }

}

完整的工程代码下载地址

https://download.csdn.net/download/liwenxiang629/88799617?spm=1001.2014.3001.5503

skywalking 中的应用日志显示

然后调用几次api 以后,就可以在skywalking的oap 中看到输出的日志信息了

点击上图中的相关日志,显示结果如下:

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

相关推荐
陌シ未央ゞ6 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法
user_admin_god9 小时前
第 01 篇:OpenAI 兼容 API 初探 —— 用 curl 跑通第一次对话
java·人工智能·spring boot·语言模型·devops
小辰爱喝汤10 小时前
基于智能定价的 校园二手交易平台-计算机毕业设计
spring boot·毕业设计·课程设计
RuoyiOffice12 小时前
SpringBoot3+Vue3 库存盘点:账面和实盘对不上,差异单怎么走审批再调账
spring boot·vue3·erp·spring boot 3·库存盘点·盘盈盘亏
行者-全栈开发13 小时前
Spring Boot 接入 MaxKey 单点登录:6 个内部系统,一次登录全通行
spring boot·iam·oauth2·统一认证·oidc·sso 单点登录·maxkey
user_admin_god14 小时前
第 09 篇:实践一 —— 文本摘要(Map-Reduce 分块)
java·人工智能·spring boot·语言模型
vx_BS8133014 小时前
【项目编号:project49759】Spring Boot 宠物综合服务平台:商城、预约、咨询、活动与健康档案的一体化实现
java·spring boot·eclipse·tomcat·intellij-idea
user_admin_god14 小时前
第 05 篇:结构化输出 —— 让模型稳定返回 JSON
java·人工智能·spring boot·语言模型
驭渊的小故事14 小时前
Spring Boot 注解详解01
java·前端·spring boot
前端初见15 小时前
Java+AI零基础入门到大牛
java·spring boot·spring·java-ee·intellij-idea