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

操你媽的大地雷,氣到我來發一篇文
寫在最前面,本文觸發的條件:
  • .NET Core
  • 單一檔案部署(Single file application)
  • Serilog
  • 以appsettings.json來定義log規則

如果滿足上述條件,記得json中要加上這一段

{
  "Serilog": {
    "Using": [    <-----THIS SECTION!!!
      "My.Assembly.With.Serilog.Extensions",
      "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,官方指南寫著推薦用單檔部署,我一直以為是哪裡弄錯沒成功啟動服務
這兩件事湊在一起真他媽的雷到誇張


沒有留言:

張貼留言

目錄