只有累積,沒有奇蹟

2019年5月9日 星期四

[NETCore] Serilog 好幫手 - Serilog Analyzer

前言
前面透過幾篇文章介紹了關於 Serilog 在 ASP.NET Core 中的應用,分別是
  • 結構化日誌 Serilog 初體驗
  • 結構化日誌 Serilog - 配置設定
  • 結構化日誌 Serilog - Events Types 和 Enrichment
  • 三篇文章從 Serilog 基本使用以及設定都做簡單的介紹,今天要分享的是 Serilog Analyzer 擴充套件,它是基於 Roslyn 針對代碼進行分析,可以幫助開發者在寫 Code 時檢查潛在的問題及建議改善項目,形容得很抽象以下直接透過實際範例說明,以及自己在使用後覺得不錯及有幫助的地方,幫助各位更快了解若有問題歡迎提出一起討論。

    下載
    可以在 Marketplace 找到,下載 傳送門

    分析
    在執行時請先注意開啟 cmd 需要使用 Admin 權限執行,否則會有執行異常或是告知沒權限的錯誤訊息,以下為開啟時應用程式時用 administrator 開啟的畫面,用管理者身分執行 cmd

    Exception Usage
    當記錄 Log 是應用在例外情境時,會檢查是否有傳遞  exception  參數,而不是定義在屬性中
    1. try
    2. {
    3. // to do something
    4. }
    5. catch (Exception ex)
    6. {
    7. Log.Error("Could not save {File}: {Error}", file, ex);
    8. throw;
    9. }
    以上代碼會提示 The exception 'ex' should be passed as first argument,如下圖所示
    因此正確的記錄方式應該是以下代碼
    1. catch (Exception ex)
    2. {
    3. Log.Error(ex, "Could not save {File}", file);
    4. }

    Property Binding Verifier
    檢查紀錄 Log 時的 property 是否有遺漏,舉例來說下列代碼要紀錄  file  與  driectory  ,少傳入一個參數在紀錄時會發生錯誤
    1. Log.Information("Saving {File} to {Directory}", file);
    筆記 : 使用 Serilog Analyzer 前後比較,未安裝前是不會提示錯誤的唷

    Message Template Syntax Verifier
    Message Template 檢查也就是會確認你的格式是否正確,如果違反 message template 會提示錯誤,以下為格式錯誤範例(少一個 { )
    1. Log.Information("Saving {File to {Directory}", file, directory);
    提示如下
    正確如下
    1. Log.Information("Saving {File} to {Directory}", file, directory);

    Configuration
    分析 Serilog logging 配置生成對應的 <appSettings> 或是 appSettings.json,不囉嗦直接看官方範例

    後記
    以上簡單僅介紹幾種使用的情境,官方支援更多的檢查與驗證,如果有興趣了解更多可以參考官方網站,另外有在網路上看到使用時會與 Resharper 衝突,但自己在使用時並未遇到衝突而不能使用的情境,如果有遇到也可以留言一起討論解決方案 :)

    參考
    SerilogAnalyzer

    Related Posts:

    • [CheatSheets] ASP.NET Memory Management 前言  在 ASP.NET 中記憶體管理一直是個很重要的議題,Pro.NET Memory Management 一書的作者為了讓開發者更容易了解其中這神祕的世界,製作了兩張關於 .NET Core 與 .NET GC 記憶體相關摘要的海報,看完覺得實用特記錄在部落格中,做為日後小抄使用 :) 海報內容僅是對於 static 與 dynamic 的兩個觀點作介紹,當然其中還是有很多細節與實作方式需要了解,如果更有興趣可以… Read More
    • [VisualStudio] ASP.NET Core 非同步代碼分析工具 - Threading.Analyzers前言 在上一篇介紹了 ASP.NET Core Task block 檢測器 - Ben.BlockingDetector ,可以在 ASP.NET Runtime 時偵測 task block 的情境並透過 log 輸出,但預防的工作總是希望越早進行越好,越快發現就更早的預防不好的寫法及早修改,本篇要介紹的是非同步代碼分析套件,可以分析靜態代碼中可能用法"不正確"的代碼,可以若有問題或是錯誤的地方歡迎高手大大給予指導或討論。 … Read More
    • [NETCore] ASP.NET Core Task block 檢測器 - Ben.BlockingDetector前言 微軟從 ASP.NET Framework 4.5 開始支援 async / await 語法,提供開發者在撰寫非同步作業時更輕鬆與容易上手,如果對於 async / await 不夠熟悉可以看黑暗大之前的好文 ASP.NET async 基本心法,但有時在一知半解寫出來的代碼有時殺傷力才會是最可怕的,如果沒有正確使用 async / await 會造成 Thread block 的問題發生,因此在撰寫&nbs… Read More
    • [NETCore] 初探 ASP.NET Core 3.0 新朋友 - System.Text.Json前言 相信大家都發現 JSON 格式已經取代過去的 XML 成為資料交換的首選,在 ASP.NET Core 3.0 專案範本設定檔也是使用 JSON 作為設定檔的格式,並內建廣受好評的 Json.NET 做為處理 JSON 格式的函式庫,依存放在 Microsoft.AspNetCore.App 無須在透過 Nuget 另外下載,但老牌的 Json.NET 雖然好用但也相對的存在過去一些沉重的包袱,為了提高性能&n… Read More
    • [Free] ASP.NET Core eBook - ASP.NET Core 的兩三事前言 去年正式踏入 ASP.NET Core 的世界,在學習 .NET Core 的過程中自己也持續地將所學到相關知識記錄在這裡,除了希望可以加深對於 ASP.NET Core 的了解之外也希望能幫助自己健忘的金魚腦,另外也有個想法是累積到一定文章數量之後,可以將所學到的文章有系統與結構性整理出來成電子書,來幫助對 .NET Core 有興趣或是正在學習的的開發者朋友,經過一個月的努力之後於是誕生了 &nbs… Read More

    0 意見:

    張貼留言

    Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

    Design by Anders Noren | Blogger Theme by NewBloggerThemes.com