iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0

Elmah 是我最一開始使用的 Log 工具,基本上它的功能就是將應用程式所有發生的錯誤記錄下來,不需要改變程式架構,而且又有介面可以觀看,十分的方便;它從 WebForm 時代就有了,到了 MVC 也是運作的很好,那這邊就來介紹一下 Elmah 要如何在 ASP.NET Core 中使用 (.NET Core 也可使用)。

不過很可惜的,目前並沒有釋出官方的 Elmah for .NET Core,不過有一個新專案: ElmahCore By @barestan,到目前為止最後更新時間是 2017–12–08,希望還會繼續維護。

有一網友 Fork 了專案持續維護:https://github.com/funky81/ElmahCore ,推薦可以使用此版


設定與使用
首先先從 Nuget 安裝 ElmahCore

因為 Nuget 原作者已經沒有再更新了,所以推薦使用 https://github.com/funky81/ElmahCore 自己 Build 一版出來

Package Explorer: Install-Package ElmahCore
DotNet CLI: dotnet add package ElmahCore

安裝完畢後,於 Startup.cs 分別於 ConfigureServices 中加入 service.AddElmah();Configure 中加入 app.UseElamh();

public class Startup
{
    ...
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddElmah();
        ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
        app.UseElmah();
        ...
    }
}

這樣就設定完成了,夠簡單吧


接下來我們就來直接測試一下,在 HomeController 中的 Index 裡,故意產生 Exception

public class HomeController : Controller
{
    public IActionResult Index()
    {
        throw new Exception($"{DateTime.Now} Generate Test Exception");
        return View();
    }
}

執行後,並故意瀏覽錯誤頁面,就已經開始記錄例外了

預設的查看的介面網址為:https://{url}:{port}/elmah

介面介紹

  1. RSS Feed: 讓你可以使用 RSS 來訂閱錯誤訊息,透過 RSS Reader 來接收每一筆最新例外資訊。
  2. RSS Digest: 同樣也是提供 RSS 訂閱,但是此 RSS 所提供的資訊為每日的例外狀態統整資訊。
  3. Download log: 可以所有的 Log 匯出成 .csv 檔案,供使用別的軟體或工具進行分析,或是提供給開發人員處理。
  4. Host: 發生例外錯誤的主機,如果系統是同時 RUN 在多台時,就可以快速分辨是哪一台主機產生了例外。
  5. Code: 錯誤代碼。
  6. Type: 例外類型。
  7. User: 已登入的使用者,若發生的例外是在使用者已經登入的情況之下,它還可以把登入的使用者名稱列出來,以供日後追蹤。
  8. Error: 例外詳細資訊,點 Deatails 可以看更多,甚至還有 Call Stack 以及相關變數,完全可以知道到底是哪個 Function 產生了例外

確保 Elmah 頁面安全
在上面的範例中,Elmah 是可以公開被存取的,這肯定不合資訊安全,所以 Elmah 有提供了一點點的資訊安全

修改 Elmah 介面路徑
只需要在 Startup.csConfigureServices 加入 service.AddElmah(); 時,加入相關設定即可完成

public class Startup
{
    ...
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddElmah<XmlFileErrorLog>(options =>
        {
            options.LogPath = "~/logs";
        });
        ...
    } 
    ...
}

不過很可惜的,現在看起來還沒登入驗證的支援,如果有興趣的或許可以去貢獻看看,或者是我沒發現?


下一篇來介紹把 Log 放到不同的儲存體上,以及如何過濾 Log


上一篇
Day 03 - ASP.NET Core 內建之 Logger 02
下一篇
Day 05 - Elmah - 02
系列文
ASP.NET Core 之 Log 紀錄和追蹤的愛恨交織5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言