SpringBoot整合Sentry监控项目日志

举报
西魏陶渊明 发表于 2022/09/25 04:12:48 2022/09/25
【摘要】 Sentry Java版使用简介 基本概念 Sentry是什么 Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。 DSN(D...

Sentry Java版使用简介

基本概念

Sentry是什么

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

DSN(Data Source Name)

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

'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{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>

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425288

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。