• 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.点击进入可以查看详细信息

     

  • 相关阅读:
    2017区块链七大趋势,概念热炒之后行业如何发展?
    区块链三大方向:比特币,其他公有链和区块链联盟,以及私有链。
    这条消息被许多人忽视,但对房价可能“一剑封喉”!
    世界主要城市名称中英文对照
    2016全球城市竞争力排行榜
    全球城市群Megalopolis
    gawc全球城市
    2016全球资产配置白皮书(附下载)
    160. Intersection of Two Linked Lists
    save change is not permitted
  • 原文地址:https://www.cnblogs.com/aaaaq/p/9253236.html
Copyright © 2020-2023  润新知