sky walking日志采集以及注意事项

2024-05-26 00:12

本文主要是介绍sky walking日志采集以及注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1,sky walking日志采集功能概述
  • 2,采集log4j2日志
  • 3,采集logback日志
  • 4,效果展示
  • 5,注意事项

1,sky walking日志采集功能概述

在介绍Sky walking日志采集功能之前,最好在系统学习一遍日志框架,这里推荐楠哥的日志框架
在实际项目中我们需要将项目中的日志采集到sky walking中以便于我们能够快速排查问题,sky walking本身提供了logback,log4j,log4j2日志采集功能。
可以直接进入官网学习和配置
在这里插入图片描述
因为现在企业基本上使用logback和log4j2两个日志框架所以我们就只演示这两个日志框架的收集。

2,采集log4j2日志

引入依赖

        <dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-log4j-2.x</artifactId><version>9.0.0</version></dependency><dependency> <!-- 引入log4j2依赖 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

如果是Spring boot项目中还需要排除他自带的logback日志框架

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 去掉springboot默认配置 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

在resource目录下新建log4j2.xml文件定义日志输出格式等
这里可以参考sky walking官方给出的配置
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30"><!--先定义所有的appender--><appenders><!-- skywalking输出器 --><GRPCLogClientAppender name="SkywalkingLog"><ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/></GRPCLogClientAppender></appenders><loggers><root level="INFO"><appender-ref ref="SkywalkingLog"/></root></loggers>
</configuration>

3,采集logback日志

如果是在springboot项目中的话不需要引入logback依赖,因为上面已经介绍过springboot自带有logback日志框架,所以只需要引入sky walking日志上传的工具包依赖

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

同样在resource目录下新建logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%tid) | %boldYellow(%thread) | %boldGreen(%logger) | %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><!-- 使用gRpc将日志发送到skywalking服务端 --><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.TraceIdPatternLogbackLayout"><Pattern>${LOG_PATTERN}</Pattern></layout></encoder></appender><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="GRPC_LOG"/></root></configuration>

4,效果展示

正常情况下日志成功展示效果如下

在这里插入图片描述

5,注意事项

最近在工作中使用sky walking时遇到一个大坑,因为项目已经运行很久了,在日志的配置文件中,已经有了很多了appender并且有些logger还是自定义的,这就导致一个问题,日志上传不成功。
在排查过程中反复确认配置是没问题的【自己新建一个项目使用相同配置都能上传成功】最终进过源码调试和查阅很多文档确认还是配置问题,
这也是为什么一开始我建议希望在好好系统性学习一下日志框架,logger里面有一个additivity配置,代表是否需要向上一级logger传递打印信息,默认是true,但是我们的项目中都是配置了false,而我们的sky walking的appender是配置在根logger里面,导致了我们的sky walking采集的日志不在同一个上下文中,所以没有采集到对应日志。
日志配置说明

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread]%-5level %msg%n"/><!--Appender: 设置日志信息的去向,常用的有以下几个ch.qos.logback.core.ConsoleAppender (控制台)ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)ch.qos.logback.core.FileAppender (文件)--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!--输出流对象 默认 System.out 改为 System.err--><target>System.err</target><!--日志格式配置--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${pattern}</pattern></encoder></appender><!--用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和OFF,如果未设置此属性,那么当前logger将会继承上级的级别。additivity:是否向上级loger传递打印信息。默认是true。<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger--><!--也是<logger>元素,但是它是根logger。默认debuglevel:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和 OFF,<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。--><root level="ALL"><appender-ref ref="console"/></root>
</configuration>

修改方案,要么将additivity设置为true,要么将所有appender放在root标签里面。

这篇关于sky walking日志采集以及注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003015

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2