[英]Using Nlog messageGeneratorFunc and structured logging
使用 Log.Info 寫出結構化日志很酷:
Log.Info("The record {id} has firstname {firstname} and lastname {lastname}",
record.Id, record.FirstName, record.LastName)
我也經常使用 Debug 方法。 在我使用將它們包裝在Log.IsDebugEnabled
但開始使用 messageGeneratorFunc 變體之前:
Log.Debug(() => string.Format("The record {0} has firstname {1} and lastname {2}",
record.Id, record.FirstName, record.LastName);
我想知道如何在 messageGeneratorFunc 中使用結構化日志記錄?
Log.Debug(() => Log.Debug("The record {id} has firstname {firstname} and lastname {lastname}",
record.Id, record.FirstName, record.LastName
看起來很奇怪...... Log.Debug Log.Debug
但當然有效...... IsDebugEnabled 的內部檢查發生兩次......是否有合適的替代方案或者應該是什么樣子?
messageGeneratorFunc-delegate 用於重/大對象的專門序列化。 當未啟用 LogLevel 時,NLog 不會調用委托。
使用 messageGeneratorFunc-delegate 來處理簡單的消息模板是沒有意義的。 它實際上只會損害性能,因為它始終需要進行委托捕獲,即使未啟用 LogLevel。
這更便宜和更快:
Log.Debug("The record {0} has firstname {1} and lastname {2}",
record.Id, record.FirstName, record.LastName);
Log.Debug("The record {id} has firstname {firstname} and lastname {lastname}",
record.Id, record.FirstName, record.LastName);
比這樣做(去優化):
Log.Debug(() => string.Format("The record {0} has firstname {1} and lastname {2}",
record.Id, record.FirstName, record.LastName);
另請參閱 NLog 教程: 記錄器應處理字符串格式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.