Sentry集成Spring Boot , 并进行错误日志收集
1. 在sentry上创建一个项目
2. 选择项目的平台
在这里我们可以看到sentry还是支持很多品台的 , vue, java , Spring Boot , C , C++ ,Go 等等 , 都支持 ,
根据自己的需求选择创建指定平台的项目即可 (我们这里选择 Spring Boot)
选择平台后 , 要指定项目的名称,以及可以选择团队来查看项目
创建完成后 , 就会进入到教程页面 , 该页面中包含了Spring Boot集成Sentry的教程 , 按照操作 , 即可 (看不懂没关系 ,下面有教程)
3. SpringBoot 集成Sentry
- 项目中的pom.xml文件引入依赖
<!-- 日志-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<!-- Sentry相关依赖 -->
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring-boot-starter</artifactId>
<version>5.7.3</version>
</dependency>
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-logback</artifactId>
<version>5.7.3</version>
</dependency>
- 获取到sentry项目的dns
点击 : 项目 --> spring-boot-test --> 点击又上角的设置按钮(进入到设置页面)
把dns密钥复制出来,一会要用到
- 在项目中的 application.yml 文件中 , 加入配置 (配置中的dns,换成刚才的dns)
sentry:
dsn: http://6e0e39a3534341e588c8ad3026ba0896@ip/6
# Set traces-sample-rate to 1.0 to capture 100% of transactions for performance monitoring.
# We recommend adjusting this value in production.
traces-sample-rate: 1.0
- 在项目的resource目录下,创建 logback.xml文件,并在文件中加入如下配置信息
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
<!-- appender是configuration的子节点,是负责写日志的组件。 -->
<!-- ConsoleAppender:把日志输出到控制台(可指定文件存放的路径) -->
<property name="LOG_HOME" value="/home/data/jar_logs/log4j/test_info"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{36}.%method\(%class{0}.java:%line\) -
%msg%n
</pattern>
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->
<appender name="syslog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<File>${LOG_HOME}/mall-api.log</File>-->
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/sys.2017-12-05.0.log -->
<fileNamePattern>${LOG_HOME}/test.%d.stdout.log</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
<maxHistory>30</maxHistory>
<!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!--<maxFileSize>10MB</maxFileSize>-->
<!--</timeBasedFileNamingAndTriggeringPolicy>-->
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{36}.%method\(%class{0}.java:%line\) -
%msg%n
</pattern>
<!-- 记录日志的编码 -->
<charset>UTF-8</charset><!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- 指定sentry-->
<appender name="Sentry" class="io.sentry.logback.SentryAppender">
<options>
<!-- NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry project/dashboard -->
<dsn>http://3c7665cc6634401bb5a53b1c998a2297@ip/5</dsn>
</options>
</appender>
<!-- 控制台输出日志级别 -->
<root level="error">
<appender-ref ref="STDOUT"/>
<appender-ref ref="syslog"/>
</root>
<!-- <logger name="org.apache.zookeeper.ClientCnxn">-->
<!-- <level value="debug"/>-->
<!-- <appender-ref ref="STDOUT"/>-->
<!-- </logger>-->
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- com.grow.api为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.grow" level="INFO" additivity="false">
<!-- 注册普通打印日志-->
<appender-ref ref="syslog"/>
<!-- 注册sentry日志系统-->
<appender-ref ref="Sentry"/>
</logger>
<!-- <logger level="DEBUG">-->
<!-- <appender-ref ref="syslog"/>-->
<!-- </logger>-->
</configuration>
- 增加测试的controller , 并进行调试sentry
package com.example.springtest.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lep
* @date 2022-01-05 17:19
*/
@RestController
@RequestMapping("/test")
@Slf4j
public class GoodsController {
// 打印不同的日志信息
@GetMapping("/test1")
public String test1() {
log.info("测试sentry打印info日志");
log.debug("测试sentry打印debug日志");
log.warn("测试sentry打印warn日志");
log.trace("测试sentry打印trace日志");
log.error("测试sentry打印error日志");
return "成功";
}
// 定义一个异常
@GetMapping("/test2")
public String test2() {
String s = null;
s.equals("b");
return "成功";
}
}
编写完成 , 运行项目 , 并调用 test1 ,test2 接口 , 查看sentry控制台页面状态
- 调试
这里我们可以看到 , 我们把项目中的错误日志收集起来了 , 以及这个错误出现的接口地址 , 路径 ,点进详情 ,
也可以看到更详细的信息 ,: 系统,浏览器,错误详细打印日志,等
这个日志收集系统,基本上已经满足了非常大的需求