Dot-Net

如何使用 Serilog ForContext

  • June 23, 2017

我是 Serilog 的新手,我很難弄清楚如何使用上下文功能。當我在輸出文件下面執行程式碼時,不包含報告 ID。有什麼我想念的想法嗎?

var logger = new LoggerConfiguration()
               .WriteTo
               .File(@"C:\Log.txt")
               .CreateLogger()
               .ForContext("Report ID", 10);

logger.Information("Test"); 

並非所有附加到日誌事件的屬性都將由附加到記錄器的所有接收器呈現;這裡使用的文件接收器只包括時間戳、級別、消息等。

要將報告 ID 放入文件中,請將其包含在接收器的outputTemplate:

var logger = new LoggerConfiguration()
 .WriteTo.File(@"C:\Log.txt",
   outputTemplate: "{Timestamp:u} [{Level}] ({ReportId}) {Message}{NewLine}{Exception}")
 .CreateLogger()
 .ForContext("ReportId", 10);

logger.Information("Test"); 

這將在每條消息中包含報告 ID。

ForContext通常用於創建較短的臨時範圍;如果您希望所有消息都具有相同的屬性,則可以使用Enrich.WithProperty()

var logger = new LoggerConfiguration()
 .Enrich.WithProperty("ReportId", 10);
 .WriteTo.File(@"C:\Log.txt",
   outputTemplate: "{Timestamp:u} [{Level}] ({ReportId}) {Message}{NewLine}{Exception}")
 .CreateLogger()

平面文件是使用結構化日誌快速啟動和執行的好方法,但使用更適合結構化儲存的數據儲存,例如CouchDBRavenDBSeq將更好地查看和關聯基於屬性值的事件。

引用自:https://stackoverflow.com/questions/23637669