使用开源软件sentry来收集日志

http://luxuryzh.iteye.com/blog/1980364 

     对于一个已经上线的系统,存在未知的bug或者运行时发生异常是很常见的事情,随之而来的几点需求产生了: 
1、系统发生异常时是否能够通过日志查看到具体原因 
2、怎样第一时间扑捉到异常 
3、系统都出现了哪些异常 
4、哪些异常出现频率高
 
     第一点好解决,利用log4j、logback等日志框架把异常信息(stacktrace,params)打印到日志文件,可以在查找时很方便看到相信信息。但是这样往往具有滞后性,等到用户反馈或者系统崩溃的时候才去线上查看日志找到原因,可能异常已经发了好几天了,损失很大。所以第二点显得格外重要,怎样做到第一时间捕捉到异常呢?你大可以tail -f yourlog.log盯着屏幕一直看,出现异常马上解决,但是日志数量大、分布在多个服务器的时候这样的做法肯定行不通了,所以需要有监控措施,第一时间告警。对于第三和第四点则是需要对异常进行分类统计。 
       所以一个日志收集系统的原型勾勒出来了:具备收集日志(对于分布式环境下,日志分布在各台服务器上)、日志统计(统计次数最多的异常,往往这就是系统的隐患所在)、监控告警(出现异常或者异常积累到一定数量以短信或者邮件的形式告警)、以及以上功能的可视化界面。其实自己去开发这样一个系统还是有难度的,好在目前已经有好的开源产品能够直接使用了,这就是Sentry,一个基于Djongo的日志收集系统。Sentry的界面漂亮、支持的语言和框架多、易于扩展、效率不错。 
     Sentry的安装和配置网上有很多教程,难度不大。Sentry是c/s结构的软件,所以部署好了服务器端以后还需要客户端,Sentry的客户端支持python/php/ruby/java等语言并且支持在众多框架中集成。
 
以和Java的logback集成为例: 
在项目的pom.xml文件中配置Sentry客户端的依赖:
 
<!-- sentry raven-java configuration --> 

Java代码   收藏代码
  1. <dependency>  
  2. <groupId>net.kencochrane.raven</groupId>  
  3. <artifactId>raven-logback</artifactId>  
  4. <version>4.1.1</version>  
  5. </dependency>  

<!-- jaskson configuration --> 
Java代码   收藏代码
  1. <dependency>  
  2. <groupId>com.fasterxml.jackson.core</groupId>  
  3. <artifactId>jackson-core</artifactId>  
  4. <version>2.3.0</version>  
  5. </dependency>  

<!-- sentry appender configuration --> 
Java代码   收藏代码
  1. <appender name="Sentry" class="net.kencochrane.raven.logback.SentryAppender">  
  2. <dsn>  
  3. http://your api key@your sentry host/4  
  4. </dsn>  
  5. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
  6. <level>ERROR</level>  
  7. </filter>  
  8. </appender>  

dsn中需要配置api keys,这个在sentry的项目配置中可以得到,一切就是这么简单,无缝集成,不影响现有的日志打印,还能帮助收集异常、统计异常,多好的事情,呵呵,下面附上一张我们部署的sentry系统的截图,敏感信息用线条抹去了请谅解。  

         最后需要说一下,毕竟sentry的日志收集是通过网络传输(TCP/UDP),会带来性能上的损耗。所以不适用于将所有业务日志全部收集到Sentry,所以有了Sentry以后还是需要普通log的,毕竟业务逻辑的跟踪和分析等等也离不开log,Sentry只是辅助的一个工具。

Sentry是一款广泛用于错误追踪和日志收集的开源服务,它可以帮助开发者快速定位并解决Android应用中的问题。要在个人安卓开发中使用Sentry,你需要按照以下步骤操作: 1. **安装依赖**:首先,需要在你的项目中添加Sentry SDK作为依赖。如果你使用的是Gradle构建系统,可以在`build.gradle`文件的`dependencies`部分添加Sentry的库: ```gradle implementation 'io.sentry:sentry-android-native:4.x.y' ``` 记得替换`x.y`为实际版本号。 2. **设置DSN**:DSN(Data Source Name)是Sentry服务器的唯一标识符,包含了你的项目ID和环境。你需要从Sentry网站获取这个值,并将其配置到你的应用中。通常会在`Application`或`SentryConfig`类里初始化SDK: ```java Sentry.init( Dsn.from("your-sentry-dsn-string"), // 可选参数如环境、附加选项等 ); ``` 3. **报告异常**:当你的应用遇到未捕获的异常时,Sentry会自动记录并在其平台上显示。为了更好地控制何时上报异常,你可以手动创建事件实例并发送: ```java try { // 你的业务代码 } catch (Exception e) { Sentry.captureException(e); // 报告异常 } ``` 4. **调试工具**:Sentry Android客户端还提供了一个实时的日志查看器,你可以在模拟器或真机上通过调试工具检查上报的问题。 5. **集成测试**:在测试环境中,你可以选择性地禁用错误报告,以便更专注于代码覆盖率和单元测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值