使用.NET Core的單一檔案部署時,Serilog不運作。你也可能以為你的程式不運作。

2 分鐘閱讀

目錄
    免責聲明

    2023/06/11 更新:
    現在起它會報個錯誤給你!🤘
    參考: https://github.com/serilog/serilog-settings-configuration/pull/353

    操你媽的大地雷,氣到我來發一篇文

    寫在最前面,本文觸發的條件:

    • .NET Core
    • 單一檔案部署 (Single file application)
    • Serilog
    • 以 appsettings.json 來定義 log 規則

    如果滿足上述條件,記得 json 中要加上這一段
    參考專案檔內安裝的 Serilog 套件來寫

    {
      "Serilog": {
        "Using": [    <-----THIS SECTION!!!
          "Serilog",
          "Serilog.Enrichers.Thread",
          "Serilog.Settings.Configuration",
          "Serilog.Sinks.Console",
          "Serilog.Sinks.File"
        ],
        "WriteTo": [
     
          ...
          
        ],
        "Enrich": [
          "FromLogContext",
          "WithThreadId",
          "WithEventId"
        ]
      }
    }
    

    這件事被寫在兩個地方

    最雷的是 Serilog 不會報錯,他就默默的,給你黑視窗,完全沒有畫面
    你會經歷
    把自己的 code 查一次
    → 花一堆時間釐清程式為什麼不運作
    → 懷疑人生
    → 發現是 appsettings.json 怪怪的,但其它設定都有讀入
    → 想辦法打開 Serilog 的報錯
    → 得到 Unable to find a method called File.
    → 丟 Google 後找到那個 issue 和文件
    → 然後氣到上自己的部落格和社群罵髒話 (╯‵□′)╯︵┻━┻

    而且我正在寫 Windows Service,官方指南寫著推薦用單檔部署,我一直以為是哪裡弄錯沒成功啟動服務
    這兩件事湊在一起真他媽的雷到誇張