查看原文
其他

Spring Boot整合 Sentry 监控项目日志

程序猿DD 2019-07-13

作者: lxchinesszz  

来源:SpringForAll社区


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-

 近期热文:

关注我

点击“阅读原文”,看本号其他精彩内容

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存