Spring Boot整合 Sentry 监控项目日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Sentry Java版使用简介


基本概念


  • Sentry是什么?


Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。


  • DSN(Data Source Name)


Sentry 服务支持多用户、多团队、多应用管理,每个应用都对应一个 PROJECTID,以及用于身份认证的 PUBLICKEY 和 SECRET_KEY。由此组成一个这样的 DSN:

'{PROTOCOL}://{PUBLICKEY}:{SECRETKEY}@{HOST}/{PATH}{PROJECT_ID}'


PROTOCOL 通常会是 http 或者 https,HOST 为 Sentry 服务的主机名和端口,PATH 通常为空。 为方便管理,每个应用生成一个 DSN。


使用 Sentry SDK


Sentry 的 SDK 通常在各语言的包管理器中成为 Raven,使用起来也非常简单。以 Java版本为例(使用SpringBoot框架):


1.首先项目中pom文件安装 Raven

 
 
  1.    <!--导入Sentry-->

  2.    <dependency>

  3.       <groupId>com.getsentry.raven</groupId>

  4.       <artifactId>raven-logback</artifactId>

  5.       <version>8.0.2</version>

  6.   </dependency>

2.在项目配置文件中建立logback.xml

 
 
  1. <configuration>

  2.    <!-- 彩色日志 -->

  3.    <!-- 彩色日志依赖的渲染类 -->

  4.    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>

  5.    <conversionRule conversionWord="wex"

  6.                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>

  7.    <conversionRule conversionWord="wEx"

  8.                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

  9.    <!-- 彩色日志格式 -->

  10.    <property name="CONSOLE_LOG_PATTERN"

  11.              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(--){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>/>

  12.    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">

  13.        <encoder>

  14.            <!--<pattern> %d{YYYY-MM-dd HH:mm:ss.SSS} [%-5level] -&#45;&#45; %logger{36} [%thread] \t- %msg%n%nopex</pattern>-->

  15.            <pattern>${CONSOLE_LOG_PATTERN}</pattern>

  16.        </encoder>

  17.    </appender>

  18.    <appender name="Sentry" class="com.getsentry.raven.logback.SentryAppender">

  19.        <!--每个项目生成不通的key-->

  20.        <dsn>http://d73b23c481654b9ca0e4e8a9db310169:daaf5dc2edef462690791ef324316738@sentry.boluome.com/7</dsn>

  21.        <!-- 设置拦截的最低级别为warn 警告-->

  22.        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

  23.            <level>WARN</level>

  24.        </filter>

  25.    </appender>

  26.    <logger name="logback.SentryAppenderIT" level="INFO">

  27.        <appender-ref ref="Sentry"/>

  28.    </logger>

  29.    <root level="INFO">

  30.        <appender-ref ref="Console"/>

  31.        <appender-ref ref="Sentry"/>

  32.    </root>

  33. </configuration>


3.application.propertes中添加导入日志配置【主要要提前在pom文件中添加包含*.xml,否则会报错,not found file】

logging.config=classpath:logback.xml

4.接口层,正常使用logger等方法。Raven会自动把warn级别通过tcp发送到日志中心,并通知相关人员查看信息

 
 
  1.   @RequestMapping(value = "/testlog", method = RequestMethod.GET)

  2.    public void testLog() {

  3.        logger.info("test接口");//最低拦截级别为warn,所以info不会输出发送到日志中心

  4.        logger.error("error"); //会显示在日志中心,并邮件通知相关联系人

  5.    }

这样就可以使用 Raven 对象向 Sentry 服务器中提交日志信息了。

使用 Sentry web 服务

主要是登录后台查看,后续有时间更新此部分文档。开通账号可找虎大师。

附录

sentry 官方文档

 
 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!-- scan="true"    当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->

  3. <!--  scanPeriod="30 seconds"   设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours)  -->

  4. <!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->

  5. <configuration scan="true" scanPeriod="30 seconds">

  6.    <!-- 上下文名称  -->

  7.    <contextName>test</contextName>

  8.    <!-- 存放日志文件路径 -->

  9.    <property name="Log_Home" value="mylogs/test"/>

  10.    <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->

  11.    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

  12.        <encoder>

  13.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->

  14.            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>

  15.        </encoder>

  16.    </appender>

  17.    <!-- DEBUG级别 -->

  18.    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">

  19.        <!-- 级别过滤器 -->

  20.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  21.            <!-- 设置过滤级别 -->

  22.            <level>DEBUG</level>

  23.            <!-- 用于配置符合过滤条件的操作 -->

  24.            <onMatch>ACCEPT</onMatch>

  25.            <!-- 用于配置不符合过滤条件的操作 -->

  26.            <onMismatch>DENY</onMismatch>

  27.        </filter>

  28.        <Encoding>UTF-8</Encoding>

  29.        <File>${Log_Home}/debug/debug.log</File>

  30.        <!-- 根据时间来制定滚动策略 -->

  31.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  32.            <FileNamePattern>

  33.                ${Log_Home}/debug/debug.%d{yyyy-MM-dd}.%i.log

  34.            </FileNamePattern>

  35.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  36.            <MaxHistory>1</MaxHistory>

  37.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  38.                <!-- 默认值是 10MB,文档最大值 -->

  39.                <MaxFileSize>2MB</MaxFileSize>

  40.            </TimeBasedFileNamingAndTriggeringPolicy>

  41.        </rollingPolicy>

  42.        <encoder>

  43.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  44.        </encoder>

  45.    </appender>

  46.    <!-- INFO级别 -->

  47.    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">

  48.        <!-- 级别过滤器 -->

  49.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  50.            <!-- 设置过滤级别 -->

  51.            <level>INFO</level>

  52.            <!-- 用于配置符合过滤条件的操作 -->

  53.            <onMatch>ACCEPT</onMatch>

  54.            <!-- 用于配置不符合过滤条件的操作 -->

  55.            <onMismatch>DENY</onMismatch>

  56.        </filter>

  57.        <Encoding>UTF-8</Encoding>

  58.        <File>${Log_Home}/info/info.log</File>

  59.        <!-- 根据时间来制定滚动策略 -->

  60.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  61.            <FileNamePattern>

  62.                ${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log

  63.            </FileNamePattern>

  64.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  65.            <MaxHistory>1</MaxHistory>

  66.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  67.                <!-- 默认值是 10MB,文档最大值 -->

  68.                <MaxFileSize>2MB</MaxFileSize>

  69.            </TimeBasedFileNamingAndTriggeringPolicy>

  70.        </rollingPolicy>

  71.        <encoder>

  72.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  73.        </encoder>

  74.    </appender>

  75.    <!-- WARN级别 -->

  76.    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">

  77.        <!-- 级别过滤器 -->

  78.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  79.            <!-- 设置过滤级别 -->

  80.            <level>WARN</level>

  81.            <!-- 用于配置符合过滤条件的操作 -->

  82.            <onMatch>ACCEPT</onMatch>

  83.            <!-- 用于配置不符合过滤条件的操作 -->

  84.            <onMismatch>DENY</onMismatch>

  85.        </filter>

  86.        <Encoding>UTF-8</Encoding>

  87.        <File>${Log_Home}/warn/warn.log</File>

  88.        <!-- 根据时间来制定滚动策略 -->

  89.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  90.            <FileNamePattern>

  91.                ${Log_Home}/warn/warn.%d{yyyy-MM-dd}.%i.log

  92.            </FileNamePattern>

  93.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  94.            <MaxHistory>1</MaxHistory>

  95.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  96.                <!-- 默认值是 10MB,文档最大值 -->

  97.                <MaxFileSize>2MB</MaxFileSize>

  98.            </TimeBasedFileNamingAndTriggeringPolicy>

  99.        </rollingPolicy>

  100.        <encoder>

  101.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  102.        </encoder>

  103.    </appender>

  104.    <!-- ERROR级别 -->

  105.    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

  106.        <!-- 级别过滤器 -->

  107.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

  108.            <!-- 设置过滤级别 -->

  109.            <level>ERROR</level>

  110.            <!-- 用于配置符合过滤条件的操作 -->

  111.            <onMatch>ACCEPT</onMatch>

  112.            <!-- 用于配置不符合过滤条件的操作 -->

  113.            <onMismatch>DENY</onMismatch>

  114.        </filter>

  115.        <Encoding>UTF-8</Encoding>

  116.        <File>${Log_Home}/error/error.log</File>

  117.        <!-- 根据时间来制定滚动策略 -->

  118.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  119.            <FileNamePattern>

  120.                ${Log_Home}/error/error.%d{yyyy-MM-dd}.%i.log

  121.            </FileNamePattern>

  122.            <!-- 多久后自动清楚旧的日志文件,单位:月 -->

  123.            <MaxHistory>1</MaxHistory>

  124.            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  125.                <!-- 默认值是 10MB,文档最大值 -->

  126.                <MaxFileSize>2MB</MaxFileSize>

  127.            </TimeBasedFileNamingAndTriggeringPolicy>

  128.        </rollingPolicy>

  129.        <encoder>

  130.            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>

  131.        </encoder>

  132.    </appender>

  133.    <!-- 控制java下面包的打印,没设置等级,将继承上级root的等级 -->

  134.    <logger name="rattlesnake.callback"/>

  135.    <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->

  136.    <!-- the level of the root level is set to DEBUG by default.       -->

  137.    <root level="DEBUG">

  138.        <appender-ref ref="STDOUT"/>

  139.        <appender-ref ref="FILE_DEBUG"/>

  140.        <appender-ref ref="FILE_INFO"/>

  141.        <appender-ref ref="FILE_WARN"/>

  142.        <appender-ref ref="FILE_ERROR"/>

  143.    </root>

  144. </configuration>

-END-



原文发布时间为:2018-10-08
本文作者:lxchinesszz
本文来自云栖社区合作伙伴“程序猿DD”,了解相关信息可以关注“程序猿DD”。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
15天前
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
如何在SpringBoot项目中使用过滤器和拦截器
|
9天前
|
Java 关系型数据库 MySQL
创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
【9月更文挑战第6天】该内容介绍如何使用 Spring Boot 实现具备 CRUD 功能及分页查询的项目。首先通过 Spring Initializr 创建项目并选择所需依赖;其次配置数据库连接,并创建实体类与数据访问层;接着构建服务层处理业务逻辑;最后创建控制器处理 HTTP 请求。分页查询可通过添加 URL 参数实现。
|
18天前
|
XML 前端开发 Java
还不会SpringBoot项目模块分层?来这手把手教你
本文详细介绍了如何为SpringBoot项目创建模块并进行合理的分层设计。通过逐步演示,从创建项目到构建各功能模块,再到具体代码实现,手把手教你实现整洁的代码分层。主要内容包括:创建依赖层、主启动层、模块层及其子模块(如共通层、控制器层、数据持久层等),并通过实例演示了从前端请求到后台服务调用的实际流程。适合SpringBoot初学者及有一定经验但需优化项目结构的开发者参考。
62 2
还不会SpringBoot项目模块分层?来这手把手教你
|
18天前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
41 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
消息中间件 缓存 监控
18 0
|
7天前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
37 1
|
18天前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
39 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
18天前
|
JavaScript 前端开发 小程序
【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
这是一个基于 SpringBoot+MybatisPlus+Vue+Iview 技术栈构建的个人极简博客系统,适合初学者实战练习。项目包含文章分类、撰写文章、标签管理和用户管理等功能,代码简洁并配有详细注释,易于上手。此外,该项目也可作为毕业设计的基础进行二次开发。
63 0
【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
|
13天前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
25 0
|
17天前
|
Java Spring 监控
Spring Boot Actuator:守护你的应用心跳,让监控变得触手可及!
【8月更文挑战第31天】Spring Boot Actuator 是 Spring Boot 框架的核心模块之一,提供了生产就绪的特性,用于监控和管理 Spring Boot 应用程序。通过 Actuator,开发者可以轻松访问应用内部状态、执行健康检查、收集度量指标等。启用 Actuator 需在 `pom.xml` 中添加 `spring-boot-starter-actuator` 依赖,并通过配置文件调整端点暴露和安全性。Actuator 还支持与外部监控工具(如 Prometheus)集成,实现全面的应用性能监控。正确配置 Actuator 可显著提升应用的稳定性和安全性。
39 0