.NET Core 使用Exceptionless分布式日志收集

来自:张子浩

一、Exceptionless简介


Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以应用在 Javascript,Node.js 中。


它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置。


在以前,我们做日志收集大多使用 Log4net,Nlog 等框架,在应用程序变得复杂并且集群的时候,可能传统的方式已经不是很好的适用了,因为收集各个日志并且分析他们将变得麻烦而且浪费时间。


现在Exceptionless团队给我们提供了一个更好的框架来做这件事情,我认为这是非常伟大并且有意义的,感谢他们。


二、使用


这里有两种方式(本地,远程)


  • 本地需要一定的环境要求(NET 4.6.1 、Java JDK 1.8+、IIS Express 8+)


  • 远程就比较方便了,非常的方便,那么今天就给大家来一波Exceptionless远程使用的教程。


三、注册账号并配置


官网:http://exceptionless.com


GitHub:https://github.com/exceptionless/Exceptionless


关于官方首页访问慢的问题,那没有办法,最好翻个梯子,当然也就只是首页慢了点,因为首页有谷歌的api,管理页面就没有那么卡了(36ms)左右。


由于我们使用的远程日志,我们得进入官方申请账号,进入官方进行账号注册。


进入创建项目,输入项目信息,创建项目!


这里当然可以选择我们喜爱的.NET Core !官方已经给你说好了,那么这个时候你的项目就可以用Exceptionless来记录日志了。那我们来创建一个.NET Core 程序吧?



四、在程序中进行远程记录


Nuget完Exceptionless.AspNetCore

(http://nuget.org/packages/Exceptionless.AspNetCore)之后会出现一个txt文件,这个txt文件是给你的一个简单的使用教程, 当然你可以选择删除。



配置中间件


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   app.UseExceptionless("xxxxxxxxxxxxxx");
   app.UseMvc();
}


这个时候你就可以正常使用了,那么我们现在故意报错一下!


public ActionResult<IEnumerable<string>> Get()
{
   throw new Exception("my text info");
   return new string[] { "value1", "value2" };
}


现在启动我们的浏览器,报错成功。



那我们的框架收集到了吗?刷洗一下,成功记录下来了。



那它替我们收集了什么信息呢?我们一探究竟!点进去噢!发现这真的太棒了。



除了记录一些基本的http信息之外,竟还有系统版本、系统架构、电脑版本、运行时等。灰常NB啊。


当然我们恶意报错是不对的,可以trycath一下,那么代码就变成了这样。


try
{
   throw new ApplicationException(Guid.NewGuid().ToString());
}
catch(Exception ex)
{
    ex.ToExceptionless().Submit();
}


除了一些异常记录之外,ExceptionLess还提供了Log (日志)、Feature Usages(功能用途)、404、Custom Event(自定义事件)。


扩展的东西是在 ExceptionlessClient.Default类中。有兴趣的话可以研究。



附日志记录封装类(很简单的那种。大佬别打我)


public class ExceptionLessLog :ILog
{
   /// <summary>
   /// 跟踪
   /// </summary>
   public void Trace(string message, params string[] tags)
   
{
       ExceptionlessClient.Default.CreateLog(message, LogLevel.Trace).AddTags(tags).Submit();
   }

   /// <summary>
   /// 调试
   /// </summary>
   public void Debug(string message, params string[] tags)
   
{
       ExceptionlessClient.Default.CreateLog(message, LogLevel.Debug).AddTags(tags).Submit();
   }

   /// <summary>
   /// 信息
   /// </summary>
   public void Info(string message, params string[] tags)
   
{
       ExceptionlessClient.Default.CreateLog(message, LogLevel.Info).AddTags(tags).Submit();
   }

   /// <summary>
   /// 警告
   /// </summary>
   public void Warn(string message, params string[] tags)
   
{
       ExceptionlessClient.Default.CreateLog(message, LogLevel.Warn).AddTags(tags).Submit();
   }

   /// <summary>
   /// 错误
   /// </summary>
   public void Error(string message, params string[] tags)
   
{
       ExceptionlessClient.Default.CreateLog(message, LogLevel.Error).AddTags(tags).Submit();
   }
}


总结


ExceptionLess功能非常强大,你看我都没怎么敲代码就搞定了这么炫酷的功能,没试过的小伙伴赶紧试一试吧.

推荐↓↓↓
DotNet程序员
上一篇:Visual Studio 2019 16.1 使用 .NET Core 3.0 下一篇:.NET Core 中的分层编译