首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Nlog messageGeneratorFunc和结构化日志记录

使用Nlog messageGeneratorFunc和结构化日志记录
EN

Stack Overflow用户
提问于 2019-01-09 04:34:58
回答 1查看 121关注 0票数 1

使用Log.Info写出结构化日志记录很酷:

代码语言:javascript
复制
Log.Info("The record {id} has firstname {firstname} and lastname {lastname}",
    record.Id, record.FirstName, record.LastName)

我也经常使用Debug方法。在我开始使用messageGeneratorFunc变体之前,我用Log.IsDebugEnabled包装它们:

代码语言:javascript
复制
Log.Debug(() => string.Format("The record {0} has firstname {1} and lastname {2}",
    record.Id, record.FirstName, record.LastName);

我想知道如何在messageGeneratorFunc中使用结构化日志记录?

代码语言:javascript
复制
Log.Debug(() => Log.Debug("The record {id} has firstname {firstname} and lastname {lastname}",
    record.Id, record.FirstName, record.LastName

看起来很奇怪。Log.Debug Log.Debug,但当然可以工作...IsDebugEnabled的内部检查发生两次...有没有合适的替代方案,或者这应该是什么样子?

EN

回答 1

Stack Overflow用户

发布于 2019-01-09 05:09:16

messageGeneratorFunc委托用于重/大对象的专门序列化。未启用LogLevel时,NLog不会调用委托。

使用messageGeneratorFunc-delegate处理简单的消息模板是没有意义的。这实际上只会影响性能,因为它总是需要进行委托捕获,即使LogLevel没有启用。

这要便宜得多,而且更快:

代码语言:javascript
复制
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);

而不是这样做(去优化):

代码语言:javascript
复制
Log.Debug(() => string.Format("The record {0} has firstname {1} and lastname {2}",
    record.Id, record.FirstName, record.LastName);

另请参阅NLog教程:Logger should handle string formatting

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54099317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档