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日志并进行多维度分析。
相关文章
|
13天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
54 5
|
18天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
56 1
SpringBoot获取项目文件的绝对路径和相对路径
|
5天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
15 1
|
9天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
21 2
|
13天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
36 8
|
1月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
34 1
Spring MVC——项目创建和建立请求连接
|
1月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
121 1
Maven——创建 Spring Boot项目
|
1月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
26 1
如何使用 maven 创建一个 Spring Boot项目
|
20天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
40 2
|
20天前
|
前端开发 Java Spring
SpringBoot项目thymeleaf页面支持词条国际化切换
SpringBoot项目thymeleaf页面支持词条国际化切换
50 2
下一篇
无影云桌面