zoukankan      html  css  js  c++  java
  • Net Core 项目引用Exceptionless记录使用

    Exceptionless是什么?能做什么呢?

    “Exceptionless”这个词的定义是:没有异常。Exceptionless可以为您的ASP.NET、Web API、WebFrm、WPF、控制台和MVC应用程序提供实时错误、特性和日志报告。它将收集的信息组织成简单的可操作的数据,这些数据将帮助你很方便的查看异常信息。还有最重要的是,它是开源的!

    Exceptionless的使用方式有哪些?

    1.官网创建帐号,并新建应用程序以及项目,然后生成apikey(数据存储在Exceptionless)

    2.自己搭建Exceptionless的环境,部署在本地(数据存储在本地)

    Exceptionless的运行环境有哪些要求?需要安装哪些软件,进行什么配置呢?

    • .NET 4.6.1 (安装了.net core 或者vs2017的话环境应该都没问题,不需要额外安装)
    • Java JDK 1.8+(如果使用windows系统的话需要配置环境变量,这个使用过java的人应该都知道吧!相信对于你来说应该不是难事).下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    • IIS Express 8+(win 7以上环境应该都没问题,不需要额外安装)
    • PowerShell 3+(win 7以上环境应该都没问题,不需要额外安装)
    • 这里分win7(管理员身份运行cmd ,然后复制下面这条命令,按回车就行了 powershell Set-ExecutionPolicy Unrestricted) 以及 win10(管理员身份运行powershell,然后执行powershell Set-ExecutionPolicy Unrestricted
    •  Elasticsearch 5.6 官方推荐这个版本,(当然你也可以不进行安装,因为后面会教你如何自动安装这个软件)需要在历史版本中找  ,下载地址:https://www.elastic.co/downloads/past-releases

    官网:http://exceptionless.com/

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

    使用在线服务

    一、首先,需要去官网注册一个帐号

    二、按照提示,添加一个你的项目:

    然后可以看到一个下拉菜单,选择项目的类型,可以看到 Exceptionless支持很多种项目。我们来选择一个 ASP.NET Core 的项目:

    三、选择完成之后,会有一个详细的步骤,说明了如何做项目中使用。

    • 首先,使用 NuGet 添加一个包,名字叫Exceptionless.AspNetCore
    • 在 ASP.NET Core 项目中,打开startup.cs文件,找到Configure()方法,添加如下:
    using Exceptionless;
    ......
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // xxxxx 处填写上图画红线部分的key
        app.UseExceptionless("xxxxxxxxxxxxxxxxxxxxxxxxxx");
    
        app.UseStaticFiles();
    
        app.UseMvc();
    }

    至此,Exceptionless 已经可以在你的项目中工作了,它会自动记录项目中的异常情况。

    在 Exceptionless 查看日志

    在 Getting Started 步骤,我们创建了一个 ASP.NET Core 项目,下面我们来运行一下,看看它是怎么工作的吧。

    打开 HomeController.cs文件,修改About的action方法,人为的制造一个异常信息:

    public IActionResult About() {
    
        throw new Exception("test exception");
       
        return View();
    }

    接下来,刷新 Exceptionless的页面,在 Dashboard 主面板中,可以看到关于整个项目的一个异常情况,并且分别以几种方式列了出来,其中包括分布图,最频繁的异常,最近的异常等等。

     这个我们刚才在Abount Action中制造的一个异常,Exceptionless已经记录了下来,点进去之后可以看一下详情:

     

    在上图中,可以很直观的看出异常的一些具体信息,除了一些基本的异常类型、时间和堆栈外,还包括访问者的坐标、IP地址、发生异常的URL地址、浏览器信息,操作系统、甚至发生异常时请求的Cookie值。

    向 Exceptionless 发送事件

    除了我们所熟悉的异常信息外,Exceptionless 还可以记录很多种类的其他信息,这些信息统称做事件(Event)。

    在Exceptionless 中,有这几类事件: Log (日志)、Feature Usages(功能用途)、404、Custom Event(自定义事件)。

    Exceptionless 中发送不同类型事件很简单,代码如下:

    using Exceptionless;
    
    // 发送日志
    ExceptionlessClient.Default.SubmitLog("Logging made easy");
    
    // 你可以指定日志来源,和日志级别。
    // 日志级别有这几种: Trace, Debug, Info, Warn, Error
    ExceptionlessClient.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 Usages
    ExceptionlessClient.Default.SubmitFeatureUsage("MyFeature");
    ExceptionlessClient.Default.CreateFeatureUsage("MyFeature").AddTags("Exceptionless").Submit();
    
    // 发送一个 404
    ExceptionlessClient.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);
    }

    Exceptionless搭建本地服务

    Exceptionless下载以及配置

      1.打包下载地址:https://github.com/exceptionless/Exceptionless/releases  如下图所示进行下载

     

    2.下载完成之后,右键解压

     3.看到如下的文件目录结构,有几点需要说明,如果你比较懒,嫌部署到iis比较麻烦,安装Elasticsearch也比较麻烦,那么,你可以双击“Start.bat”这个脚本,它会自动帮你安装Elasticsearch,以及(当然,生产环境,还是建议自己搭建Elasticsearch的好)

    4.如果出现下图所示,那么你就耐心的等等就行了,运行结束后会自动为您打开Exceptionless的管理页面

    ,如果不幸,cmd里面出现红色字体,而且一闪就自动退出的话,那就执行下powershell Set-ExecutionPolicy Unrestricted 这个命令,然后再双击“Start.bat”这个脚本运行吧!

    • 这里分win7(管理员身份运行cmd ,然后复制下面这条命令,按回车就行了 powershell Set-ExecutionPolicy Unrestricted) 以及 win10(管理员身份运行powershell,然后执行powershell Set-ExecutionPolicy Unrestricted

    5.如果全部安装成功后,会自动为你打开几个页面。还是先来看下目录结构吧,如下图所示,默认安装Elasticsearch是5.5.2 同时安装了kibana版本也是5.5.2

    6.打开的几个页面如下图所示,然后在Exceptionless的页面,点击注册按钮注册一个账号,然后进行登录

     

     7.下面进入项目类型配置界面,在1.select your project type下拉框选择asp.net core

     

    8.出现下面的界面,说明配置完成,并且给出使用说明。到此Exceptionless的安装配置已经完成。

     

    接下来我们通过一个实例项目进行实战

    1.新建一个 netcore api项目,这一步应该难不倒你吧,我就不上图了。

    2.在程序包管理器中,选中你的项目,然后输入“ Install-Package Exceptionless.AspNetCore”安装nuget包吧,当然也可以通过其他方式安装,就不介绍了

     

    3.在startup.cs中添加 引用

        
    using Exceptionless;

    然后在Configure方法中添加Exceptionless管道信息

    ExceptionlessClient.Default.Configuration.ApiKey = Configuration.GetSection("Exceptionless:ApiKey").Value;
               ExceptionlessClient.Default.Configuration.ServerUrl = Configuration.GetSection("Exceptionless:ServerUrl").Value;
               app.UseExceptionless();

    然后在appsettings.json中添加apikey以及serverurl的配置

    "Exceptionless": {
       "ApiKey": "OvzcKg8V7bPcWU8yAYBVe6uCEKIAQm3xfEzW5yxp",
       "ServerUrl": "http://localhost:50000"
     }

    好了,exceptionless的配置以及完成,接下来就是代码中使用了!

     4.代码中使用异常,直接上代码吧!就是在ValuesController中修改下get方法进行下测试,代码很简单

    / GET api/values
         [HttpGet]
         public ActionResult Get()
         {
             try
             {
                 throw new Exception("ExceptionDemo 的异常");
             }
             catch (Exception ex)
             {
                 ex.ToExceptionless().Submit();
             }
             return Ok();
         }

    5.运行起来吧。然后浏览器切换到exceptionless的面板进行查看吧,会自动刷新出现异常信息,如下图 http://localhost:50000/#!/project/5b2663e4e6c0b51dd015bdab/dashboard

    6.点击进入可以查看详细信息

     

  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/aaaaq/p/9253236.html
Copyright © 2011-2022 走看看