簡體   English   中英

使用 Nlog messageGeneratorFunc 和結構化日志

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM