大家都知道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>
在srcmainresources 根目录下创建文件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 中看到输出的日志信息了
点击上图中的相关日志,显示结果如下:
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!
原文地址:https://blog.csdn.net/liwenxiang629/article/details/135966724
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_64805.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!