使用上下文信息进行日志记录
Posted
技术标签:
【中文标题】使用上下文信息进行日志记录【英文标题】:Logging with context information 【发布时间】:2017-09-27 18:20:07 【问题描述】:我正在从事一个新项目,我想将 serilog 与 ninject 集成。
用例如下:
有很多常用库 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的 GUID。这 是抽象插件类的基础属性,每个 插件的实现继承 我们希望将此唯一名称附加到插件生成的每条日志消息中 以及从该插件对公共库的任何调用,以便日志 消息可以追溯到制作它的插件的唯一实例 我们不希望修改公共库中的每个类来接收记录器以用于记录我的想法是:
创建单例记录器提供程序。这将被任何需要记录的东西调用。 使用 postsharp 和 CallContext.LogicalSetData 在调用日志记录提供程序之前设置 GUID 使用 CallContext.LogicalGetData 在单例记录器提供程序中获取 GUID。这将使用 Logger.ContextFor 检索该 GUID 的现有记录器,或者创建一个新记录器以添加到字典中。 始终在请求时使用 Ninject 将 ILoggerProvider 解析为单例提供程序在我走这条迂回路线之前,有没有更好的方法来做到这一点,也许是 ninject?
感谢阅读。
【问题讨论】:
【参考方案1】:我采用了所描述的解决方案,但由于它是单例,最终不需要 ninject。
该解决方案正在运行,并且在大量记录时似乎没有任何性能问题
【讨论】:
以上是关于使用上下文信息进行日志记录的主要内容,如果未能解决你的问题,请参考以下文章