使用上下文信息进行日志记录

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。

该解决方案正在运行,并且在大量记录时似乎没有任何性能问题

【讨论】:

以上是关于使用上下文信息进行日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Python之向日志输出中添加上下文信息

根据上下文源将 Serilog 日志过滤到不同的接收器?

需要从github上下载所有的审计日志和大量的历史记录。

logging模块

logging模块

使用Spring AOP 记录Spring MVC请求日志