前言

Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技术开发的应用程序中,并且提供了REST接口可以应用在 Javascript,Node.js 中。(基本就是.Net技术栈的一套东西)

项目地址:https://github.com/exceptionless/Exceptionless

它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置,对于微服务架构的应用程序来说,统一的日志收集系统的建立更是有必要。

要使用的话只需要在其官网上注册个账号,然后在代码中配置一下APIKey就可以了,不过免费版额度有限,当然还是自己部署一套比较好,这次依然使用docker部署

安装

docker部署可以在GitHub下载代码自己构建,也可以用官方打包好的镜像,为了方便这里我直接使用官方打包的镜像

docker-compose.yml 内容如下

可以看到其中包含5个容器:ExceptionLess App、ExceptionLess Job、elasticsearch、kibana、Redis

  1. version: '3.7'
  2. services:
  3. app:
  4. depends_on:
  5. - elasticsearch
  6. - redis
  7. image: exceptionless/app:latest
  8. environment:
  9. EX_AppMode: Production
  10. EX_ConnectionStrings__Cache: provider=redis
  11. EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200
  12. EX_ConnectionStrings__MessageBus: provider=redis
  13. #EX_ConnectionStrings__Metrics: provider=statsd;server=statsd;
  14. EX_ConnectionStrings__Queue: provider=redis
  15. EX_ConnectionStrings__Redis: server=redis,abortConnect=false
  16. EX_ConnectionStrings__Storage: provider=folder;path=/app/storage
  17. # 官方配置默认包含HTTPS,我把它关了
  18. #ASPNETCORE_URLS: http://+;https://+
  19. ASPNETCORE_URLS: http://+
  20. # 关了HTTPS,这个端口也不用配置了
  21. #ASPNETCORE_HTTPS_PORT: 5001
  22. # 关了HTTPS,证书也不用配置
  23. #ASPNETCORE_Kestrel__Certificates__Default__Password: password
  24. #ASPNETCORE_Kestrel__Certificates__Default__Path: /https/aspnetapp.pfx
  25. EX_RunJobsInProcess: 'false'
  26. ports:
  27. - 5000:80
  28. # 关了HTTPS,不需要映射443端口
  29. #- 5001:443
  30. volumes:
  31. - ex_appdata:/app/storage
  32. - ex_ssldata:/https
  33. jobs:
  34. depends_on:
  35. - app
  36. image: exceptionless/job:latest
  37. environment:
  38. EX_AppMode: Production
  39. # UI地址,修改这里的IP地址为你的服务器IP地址
  40. EX_BaseURL: http://你的IP:5000
  41. EX_ConnectionStrings__Cache: provider=redis
  42. EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200
  43. # 邮件配置
  44. EX_ConnectionStrings__Email: smtps://邮箱地址:密码@SMTP服务器:端口
  45. EX_SmtpFrom: 发件邮箱地址
  46. EX_ConnectionStrings__MessageBus: provider=redis
  47. #EX_ConnectionStrings__Metrics: provider=statsd;server=statsd;
  48. EX_ConnectionStrings__Queue: provider=redis
  49. EX_ConnectionStrings__Redis: server=redis,abortConnect=false
  50. EX_ConnectionStrings__Storage: provider=folder;path=/app/storage
  51. volumes:
  52. - ex_appdata:/app/storage
  53. elasticsearch:
  54. image: exceptionless/elasticsearch:7.15.2
  55. environment:
  56. discovery.type: single-node
  57. xpack.security.enabled: 'false'
  58. ES_JAVA_OPTS: -Xms1g -Xmx1g
  59. ports:
  60. - 9200:9200
  61. - 9300:9300
  62. volumes:
  63. - ex_esdata:/usr/share/elasticsearch/data
  64. kibana:
  65. depends_on:
  66. - elasticsearch
  67. image: docker.elastic.co/kibana/kibana:7.15.2
  68. ports:
  69. - 5601:5601
  70. redis:
  71. image: redis:6.0-alpine
  72. ports:
  73. - 6379:6379
  74. volumes:
  75. ex_esdata:
  76. driver: local
  77. ex_appdata:
  78. driver: local
  79. ex_ssldata:
  80. driver: local

邮件配置

邮件配置是比较麻烦的地方,我查了一些资料才解决

jobs容器中的这两个环境变量里配置

  1. EX_ConnectionStrings__Email: smtps://邮箱地址:密码@SMTP服务器:端口
  2. EX_SmtpFrom: 发件邮箱地址

有坑的地方就是EX_ConnectionStrings__Email变量的邮箱地址需要对@符号进行转义,用%40代替@符号

以我的自建邮箱为例,邮箱地址是:test@dealiaxy.com,那么配置就是这样

  1. EX_ConnectionStrings__Email: smtps://test%40dealiaxy.com:密码@SMTP服务器:端口
  2. EX_SmtpFrom: test@dealiaxy.com

这样配置完成就可以正常发邮件了~

PS:还可以配置Webhook实现报错自动推送到微信、钉钉之类的平台,不细说了

AspNetCore集成

我主要使用的.Net技术栈是AspNetCore,其他项目可以参考官方文档的集成教程

首先在ExceptionLess中创建一个项目,把APIKey复制下来

编辑AspNetCore项目的appsettings.json文件,增加配置

  1. "Exceptionless": {
  2. "ServerUrl": "http://12.0.0.1:5000",
  3. "ApiKey": "Rajo99MksQTS6zZK81238jTkNHNOQP33A3iW45JC"
  4. }

然后编辑Program.cs,添加服务和中间件

  1. builder.Services.AddExceptionless(builder.Configuration);
  2. app.UseExceptionless();

集成这一步就搞定了

记录事件

Exceptionless中的事件有以下几种类型:

  • 日志消息:记录的日志,可以是任何文本内容
  • 特性使用:功能使用量的记录,例如接口调用情况等
  • 异常情况:记录异常的信息
  • 失效链接:当被访问的页面不存在时进行记录

除此之外,每个事件还可以附加tags、object、UserIdentity、Description之类的信息,有这些信息的辅助可以方便后续排查问题。

最简单的使用

  1. ExceptionlessClient.Default.CreateLog("message").Submit();

CreateLog方法会放回一个EventBuilder类型的对象,之后在这个对象上进行大部分操作支持链式调用

可以像上面那样一行代码链式调用,也可以这样

  1. // 先创建
  2. var eventBuilder = ExceptionlessClient.Default.CreateLog("message");
  3. // 再来慢慢添加
  4. eventBuilder.AddObject(...);
  5. eventBuilder.AddTags(...);
  6. // 最后提交
  7. eventBuilder.Submit();

可以附加到事件中的信息有很多,下面是官网提供的一些例子

  1. // Set the reference id of the event so we can search for it later (reference:id).
  2. // This will automatically be populated if you call ExceptionlessClient.Default.Configuration.UseReferenceIds();
  3. .SetReferenceId(Guid.NewGuid().ToString("N"))
  4. // Add the order object but exclude the credit number property.
  5. .AddObject(order, "Order", excludedPropertyNames: new [] { "CreditCardNumber" }, maxDepth: 2)
  6. // Set the quote number.
  7. .SetProperty("Quote", 123)
  8. // Add an order tag.
  9. .AddTags("Order")
  10. // Mark critical.
  11. .MarkAsCritical()
  12. // Set the coordinates of the end user.
  13. .SetGeo(43.595089, -88.444602)
  14. // Set the user id that is in our system and provide a friendly name.
  15. .SetUserIdentity(user.Id, user.FullName)
  16. // Set the users description of the error.
  17. .SetUserDescription(user.EmailAddress, "I tried creating an order from my saved quote.")

例如,使用SetUserIdentity设置了用户信息,在异常列表就可以看到用户名,如图

AddTags添加标签,在页面中以badge的形式显示

还有AddObject,很方便,可以直接把对象传进去,由于C#语言有匿名对象,那就更方便了,在页面上的“扩展数据”标签页上可以看到,ExceptionLess会把对象处理成表格形式,更加直观

提交错误信息

ExceptionLess提供了Exception对象的扩展方法

可以catch到错误后直接Submit

  1. try {}
  2. catch (Exception ex) {
  3. ex.ToExceptionless().Submit();
  4. }

当然也可以附加一些信息进去

  1. ex.ToExceptionless().AddObject(...).Submit();

集成日志框架

除了手动提交事件,它还提供了与现有日志框架集成的方法

安装对应的nuget包就行(简单搜了一下,至少对Log4net和NLog的支持应该是没啥问题的)

以与Log4net集成为例,首先安装nuget包:Exceptionless.Log4net

附上一个简单的Log4net配置

  1. <log4net>
  2. <appender name="exceptionless" type="Exceptionless.Log4net.ExceptionlessAppender,Exceptionless.Log4net">
  3. <layout type="log4net.Layout.PatternLayout">
  4. <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline"/>
  5. </layout>
  6. </appender>
  7. <root>
  8. <level value="DEBUG"/>
  9. <appender-ref ref="exceptionless"/>
  10. </root>
  11. </log4net>

其他语言能用吗?

虽然官方只支持.Net平台和前端(js调用、vue3),不过ExceptionLess提供了大量的HTTP接口,想要在其他语言的项目中使用,只需要调用对应的接口就行了,甚至可以自己封装一个

不过在其他语言的项目中,我推荐使用Sentry(下一篇文章要介绍的),支持的语言/框架更多,ExceptionLess的优势在于和AspNetCore这类.Net平台的结合更好,结果页面更直观~

话说回来,ExceptionLess的接口文档(Swagger)在/docs/index.html,根据部署地址访问就能看到,里面你要的功能基本都有。

参考资料

ExceptionLess的安装、配置、使用的更多相关文章

  1. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  2. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  3. 【转】asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  4. Hive安装配置指北(含Hive Metastore详解)

    个人主页: http://www.linbingdong.com 本文介绍Hive安装配置的整个过程,包括MySQL.Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区 ...

  5. Hive on Spark安装配置详解(都是坑啊)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...

  6. ADFS3.0与SharePoint2013安装配置(原创)

    现在越来越多的企业使用ADFS作为单点登录,我希望今天的内容能帮助大家了解如何配置ADFS和SharePoint 2013.安装配置SharePoint2013这块就不做具体描述了,今天主要讲一下怎么 ...

  7. Hadoop的学习--安装配置与使用

    安装配置 系统:Ubuntu14.04 java:1.7.0_75 相关资料 官网 下载地址 官网文档 安装 我们需要关闭掉防火墙,命令如下: sudo ufw disable 下载2.6.5的版本, ...

  8. redis的安装配置

    主要讲下redis的安装配置,以及以服务的方式启动redis 1.下载最新版本的redis-3.0.7  到http://redis.io/download中下载最新版的redis-3.0.7 下载后 ...

  9. Windows环境下的NodeJS+NPM+Bower安装配置

    npm作为一个NodeJS的模块管理,之前我由于没有系统地看资料所以导致安装配置模块的时候走了一大段弯路,所以现在很有必要列出来记录下.我们要先配置npm的全局模块的存放路径以及cache的路径,例如 ...

  10. ubuntu kylin 14.04安装配置MongoDB v2.6.1(转)

    1.获取最新版本 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz 2.解压并进入bin目录 tar zxvf mongo ...

随机推荐

  1. Hive 3.x 配置&详解

    Hive 1. 数据仓库概述 1.1 基本概念 数据仓库(英语:Data Warehouse,简称数仓.DW),是一个用于存储.分析.报告的数据系统. 数据仓库的目的是构建面向分析的集成化数据环境,分 ...

  2. Mybatis-Plus入门实践

    简介 Mybatis-Plus 简称 MP ,是 Mybatis 的增强工具,提供了一批开箱即用的功能.特性.接口.注解,简化了应用程序访问数据库的相关操作,完善了Mybatis作为ORM仅能做到半自 ...

  3. .NET性能优化-使用ValueStringBuilder拼接字符串

    前言 这一次要和大家分享的一个Tips是在字符串拼接场景使用的,我们经常会遇到有很多短小的字符串需要拼接的场景,在这种场景下及其的不推荐使用String.Concat也就是使用+=运算符. 目前来说官 ...

  4. wait、notify和notifyAll方法学习

    wait.notify和notifyAll方法 wait() 方法会使该锁资源释放,然后线程进入等待WAITING状态,进入锁的waitset中,然后等待其他线程对锁资源调用notify方法或noti ...

  5. 1903021121-刘明伟 实验一 19信计JAVA—Markdown排版学习

    项目 内容 班级博客链接 19信计班(本) 作业要求链接 实验一 课程学习目标 学习使用Markdown排版 这个作业帮助我们实现了什么学习目标 学会使用Markdown排版 任务一:在博客园平台注册 ...

  6. 1.Spring开发环境搭建——intellj

    1.在intellj中新建项目,选择JDK版本(1.8版本) 2.选择相关信息填写,注意Java版本要和上面步骤选择的版本一致. 3.选择springBoot版本,勾选Spring Web选项. 4. ...

  7. MySQL(8) - MySQL的事务机制

    MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...

  8. 292. Nim Game - LeetCode

    Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢. n 是否能赢 1 true 2 true 3 true 4 false 不 ...

  9. singlelinklist

    C++实现单链表 阅读先知 链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素. 链表中每一个元素成为"结点",每一个结点都是由数 ...

  10. Kubernetes Job Controller 原理和源码分析(三)

    概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...