1. 程式人生 > >Net Core 項目引用Exceptionless記錄使用

Net Core 項目引用Exceptionless記錄使用

pri project json 記錄 幫助 mep bubuko 官網 car

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.點擊進入可以查看詳細信息

技術分享圖片

Net Core 項目引用Exceptionless記錄使用