使用上下文信息记录

时间:2017-04-29 20:56:31

标签: dependency-injection ninject aop postsharp serilog

我正在开展绿地项目,我想将serilog与ninject整合。

用例如下:

  • 有许多常见的库
  • 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的GUID。这个 是一个抽象插件类的基本属性 插件的实现继承
  • 我们希望将此唯一名称附加到插件所生成的每条日志消息中 以及从该插件调用公共库以便记录日志 消息可以追溯到创建它的插件的唯一实例
    • 我们不希望修改公共库中的每个类以使用记录器来记录

我的想法是:

  • 创建单例记录器提供程序。这将由需要记录的任何东西调用。
    • 使用postsharp和CallContext.LogicalSetData在任何对日志记录提供程序的调用之前设置GUID
    • 使用CallContext.LogicalGetData获取单例记录器提供程序中的GUID。这将使用Logger.ContextFor检索该GUID的现有记录器,或者创建一个新的记录器以添加到字典中。
    • 使用Ninject在请求时始终将ILoggerProvider解析为单身人士提供者

在我走下这条迂回路线之前,有没有更好的方法来做到这一点,也许是ninject?

感谢阅读。

1 个答案:

答案 0 :(得分:0)

我按照描述采用了解决方案,但由于它是一个单身人士,最终不需要ninject。

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