
每年,我向埃里克(Exceptionless的作者之一)承诺将在中国推广Exceptionless,但是由于种种原因,我没有这样做,所以我向Eric道歉. : )
Exceptionless是一个开放源代码实时日志收集框架,它可以在基于ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,控制台,MVC和其他技术堆栈的应用程序中使用,并提供Rest接口可以在Javascript和Node.js中使用. 它使日志收集变得简单易用,并且不需要太多的技术细节和配置.
过去,我们使用Log4net,Nlog和其他框架进行日志收集. 当应用程序变得复杂且集群化时,传统方法可能不太适合,因为收集每个日志并对其进行分析将发生变化. 这很麻烦net分布式系统日志统一,很浪费时间.
现在,Exceptionless团队为我们提供了一个更好的框架来实现这一目标,我认为这是非常伟大而有意义的,谢谢他们.
让我们看看.
官方网站:
GitHub:
首先,首先,您需要访问官方网站注册一个帐户(您知道哪些学生无法开通),并在注册完成后登录系统.
ps: 无例外的系统也可以部署到本地服务器

第二,按照提示添加项目:
然后您将看到一个下拉菜单,选择项目类型,您可以看到Exceptionless支持多种项目. 让我们选择一个ASP.NET Core项目:
三,选择完成后,将有一个详细的步骤,说明如何在项目中使用它.
using Exceptionless;
......public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){ // xxxxx 处填写上图画红线部分的key
app.UseExceptionless("xxxxxxxxxxxxxxxxxxxxxxxxxx");
app.UseStaticFiles();
app.UseMvc();
}
这时,Exceptionless可以在您的项目中工作,它将自动在项目中记录异常.
在“入门”步骤中net分布式系统日志统一,我们创建了一个ASP.NET Core项目. 让我们运行它,看看它如何工作.
打开HomeController.cs文件并修改About操作方法以人为地创建异常消息:

public IActionResult About() { throw new Exception("test exception");
return View();
}
接下来,刷新“例外”页面. 在“仪表板”主面板中,您可以看到有关整个项目的异常,并且以多种方式列出了它们,包括分布图,最频繁的异常,最新的异常等等.
我们刚刚在Abount Action中创建的此例外记录为Exceptionless,单击它后,您可以看到详细信息:
在上图中,您可以直观地看到有关该异常的一些特定信息. 除了一些基本的异常类型,时间和堆栈,它还包括访问者的坐标,IP地址,发生异常的URL地址,浏览器信息,操作系统,甚至是发生异常时请求的cookie值.
除了我们熟悉的异常信息之外,Exceptionless还可以记录许多其他信息,这些信息统称为事件.

在例外情况下,事件类型有以下几种: 日志,功能使用,404,自定义事件.
在Exceptionless中发送不同类型的事件非常简单,代码如下:
using Exceptionless;// 发送日志
ExceptionlessClient.Default.SubmitLog("Logging made easy");// 你可以指定日志来源,和日志级别。// 日志级别有这几种: Trace, Debug, Info, Warn, ErrorExceptionlessClient.Default.SubmitLog(typeof(Program).FullName, "This is so easy", "Info");
ExceptionlessClient.Default.CreateLog(typeof(Program).FullName, "This is so easy", "Info").AddTags("Exceptionless").Submit();// 发送 Feature UsagesExceptionlessClient.Default.SubmitFeatureUsage("MyFeature");
ExceptionlessClient.Default.CreateFeatureUsage("MyFeature").AddTags("Exceptionless").Submit();// 发送一个 404ExceptionlessClient.Default.SubmitNotFound("/somepage");
ExceptionlessClient.Default.CreateNotFound("/somepage").AddTags("Exceptionless").Submit();// 发生一个自定义事件ExceptionlessClient.Default.SubmitEvent(new Event { Message = "Low Fuel", Type = "racecar", Source = "Fuel System" });
手动发送已处理的异常
有时,我们在程序代码中显式处理一些异常. 目前,我们可以手动将一些异常信息发送给Exceptionless.
try {
throw new ApplicationException(Guid.NewGuid().ToString());
}
catch (Exception ex)
{
ex.ToExceptionless().Submit();
}
在发送的事件中添加其他标签
发送事件时,如果添加坐标,标签,属性等,则可以为要发送的当前事件添加其他上下文信息.
try { throw new ApplicationException("Unable to create order from quote.");
}
catch (Exception ex)
{
ex.ToExceptionless() // 为事件设定一个编号,以便于你搜索
.SetReferenceId(Guid.NewGuid().ToString("N")) // 添加一个不包含CreditCardNumber属性的对象信息
.AddObject(order, "Order", excludedPropertyNames: new [] { "CreditCardNumber" }, maxDepth: 2) // 设置一个名为"Quote"的编号
.SetProperty("Quote", 123) // 添加一个名为“Order”的标签
.AddTags("Order") // 标记为关键异常
.MarkAsCritical() // 设置一个地理位置坐标
.SetGeo(43.595089, -88.444602) // 设置触发异常的用户信息
.SetUserIdentity(user.Id, user.FullName) // 设置触发用户的一些描述
.SetUserDescription(user.EmailAddress, "I tried creating an order from my saved quote.") // 发送事件
.Submit();
}
统一处理已发送事件

默认情况下,您可以将额外的事件绑定到ExceptionlessClient.Default.SubmittingEvent,以统一一些自定义处理.
ExceptionlessClient.Default.SubmittingEvent += OnSubmittingEvent;private void OnSubmittingEvent(object sender, EventSubmittingEventArgs e) { // 仅处理未被处理过的异常
if (!e.IsUnhandledError) return; // 忽略404事件
if (e.Event.IsNotFound()) {
e.Cancel = true; return;
} // 获取error对象
var error = e.Event.GetError(); if (error == null) return; // 忽略 401 或 `HttpRequestValidationException`异常
if (error.Code == "401" || error.Type == "System.Web.HttpRequestValidationException") {
e.Cancel = true; return;
} // 忽略不是指定命名空间代码抛出的异常
var handledNamespaces = new List<string> { "Exceptionless" }; if (!error.StackTrace.Select(s => s.DeclaringNamespace).Distinct().Any(ns => handledNamespaces.Any(ns.Contains))) {
e.Cancel = true; return;
}
e.Event.AddObject(order, "Order", excludedPropertyNames: new [] { "CreditCardNumber" }, maxDepth: 2);
e.Event.Tags.Add("Order");
e.Event.MarkAsCritical();
e.Event.SetUserIdentity(user.EmailAddress);
}
一起使用NLog或Log4Net
有时,该程序需要记录非常详细的日志信息,例如在开发阶段. 此时,可以与log4net或nlog一起使用. 有关详细信息,请参见此示例.
如果程序在短时间内生成大量日志,例如在一分钟内生成数千个日志. 这时,您需要使用内存中的存储事件,以便客户端不会将事件序列化到磁盘,因此速度会更快. 这样,您可以使用Log4net或Nlog将某些事件存储到磁盘,并将无异常事件存储在内存中.
using Exceptionless;ExceptionlessClient.Default.Configuration.UseInMemoryStorage();
本文主要介绍Exceptionless,然后介绍Exceptionless如何发送日志.
由于Exceptionless网站目前在国外,并且该网站中调用了一些Google API,因此在中国访问可能会有些麻烦. 您可以先体验该功能. 毕竟,Exceptionless是开源且免费的,并且服务器也可以在本地部署.
如果您认为这篇文章对您有所帮助,并且想让更多的人知道Exceptionless,请谢谢[推荐].
如果您对Exceptionless感兴趣或想学习Exceptionless的代码,可以加入该小组.
无与伦比的QQ组: 330316486.
原始地址:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-236388-1.html
露出一个明白人的xx