【问题标题】: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?

感谢阅读。

【问题讨论】:

    标签: dependency-injection ninject aop postsharp serilog


    【解决方案1】:

    我采用了所描述的解决方案,但由于它是单例,最终不需要 ninject。

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

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多