前言

本篇主要紀錄簡單應用,多會使用 Linqpad 加以介紹。

本文

首先依據官方文件我們需要先安裝 Serilog 的 Nuget 套件。
要安裝的有以下三個:

安裝完成後就可以使用官方提供的範例來練習寫一個 Log

  1. void Main()
  2. {
  3. Log.Logger = new LoggerConfiguration()
  4. .MinimumLevel.Debug()
  5. .WriteTo.Console()
  6. .WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Day)
  7. .CreateLogger();
  8. Log.Information("Log Test");
  9. int a = 10, b = 0;
  10. try
  11. {
  12. Log.Debug("Dividing {A} by {B}", a, b);
  13. Console.WriteLine(a / b);
  14. }
  15. catch (Exception ex)
  16. {
  17. Log.Error(ex, "Something went wrong");
  18. }
  19. finally
  20. {
  21. Log.CloseAndFlush();
  22. }
  23. }

在上面這個範例中,我們指定了 Log 存放於 D:/logs/myapp.txt 這個檔案中,而後面這個變數則可以指定存放的檔案名稱是以甚麼來做為區分,目前是使用當天日期。

也是有其他的選項可以做選擇

範例

Log 內的檔案資訊如圖

這邊可以看到 Serilog 會幫我們整理好一個固定的格式,以及 Log 的等級,便於觀看。

Log 的等級則簡單的分為了以下六種:

結構化的優勢

紀錄 Array

  1. void Main()
  2. {
  3. Log.Logger = new LoggerConfiguration()
  4. .MinimumLevel.Debug()
  5. .WriteTo.Console()
  6. .WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
  7. .CreateLogger();
  8. var fruit = new[] { "Apple", "Pear", "Orange" };
  9. Log.Information("In my bowl I have {Fruit}", fruit);
  10. }

紀錄 Dictionary

  1. var fruit = new Dictionary<string,int> {{ "Apple", 1}, { "Pear", 5 }};
  2. Log.Information("In my bowl I have {Fruit}", fruit);

最大優勢就是直接幫忙轉換成了 Json 這個易讀的格式,讓看 Log 的可讀性一下子提升了不少。

  1. void Main()
  2. {
  3. Log.Logger = new LoggerConfiguration()
  4. .MinimumLevel.Debug()
  5. .WriteTo.Console()
  6. .WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
  7. .CreateLogger();
  8. var sensorInput = new { one = "123", two = 134 ,three = true};
  9. Log.Information("Processing {SensorInput}", sensorInput);
  10. }

對 Object 的支援也可以用輕鬆處理。

  1. void Main()
  2. {
  3. Log.Logger = new LoggerConfiguration()
  4. .MinimumLevel.Debug()
  5. .WriteTo.Console()
  6. .WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
  7. .CreateLogger();
  8. var sensorInput = new[] {1,2,3};
  9. Log.Information("Processing {$SensorInput}", sensorInput);
  10. }

若要看紀錄的型別可以使用 $

如果想要把整個 Log 記錄成 Json 格式,則可以使用 Serilog.Formatting.Compact 來做格式的轉換。

  1. void Main()
  2. {
  3. Log.Logger = new LoggerConfiguration()
  4. .MinimumLevel.Debug()
  5. .WriteTo.Console()
  6. .WriteTo.File(new CompactJsonFormatter(), "D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
  7. .CreateLogger();
  8. var sensorInput = new[] {1,2,3};
  9. Log.Information("Processing {@SensorInput}", sensorInput);
  10. }

後記

簡單的使用紀錄就到這邊,下一篇準備來個簡單的狀況題順便練習一下如何使用 Serilog 將想記錄的 Log 寫入目標 DB。

參考連結