Dependency injection 使用上下文信息记录日志

Dependency injection 使用上下文信息记录日志,dependency-injection,ninject,aop,postsharp,serilog,Dependency Injection,Ninject,Aop,Postsharp,Serilog,我正在从事一个绿地项目,我想将serilog与ninject集成 用例如下所示: 有许多公共库 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的GUID。这 是抽象插件类的基本属性,每个 插件继承的实现 我们希望将这个唯一的名称附加到插件生成的每个日志消息中 以及该插件对公共库的任何调用,以便 消息可以追溯到制作它的插件的唯一实例 我们不希望修改公共库中的每一个类,以获取用于记录日志的记录器 我的想法是: 创建一个单例记录器提供程序。这将被需要记录的任何东西调用。 在调

我正在从事一个绿地项目,我想将serilog与ninject集成

用例如下所示:

  • 有许多公共库
  • 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的GUID。这 是抽象插件类的基本属性,每个 插件继承的实现
  • 我们希望将这个唯一的名称附加到插件生成的每个日志消息中 以及该插件对公共库的任何调用,以便 消息可以追溯到制作它的插件的唯一实例
    • 我们不希望修改公共库中的每一个类,以获取用于记录日志的记录器
我的想法是:

  • 创建一个单例记录器提供程序。这将被需要记录的任何东西调用。
    • 在调用日志提供程序之前,使用postsharp和CallContext.LogicalSetData设置GUID
    • 使用CallContext.LogicalGetData获取singleton logger提供程序中的GUID。这将使用logger.ContextFor检索该GUID的现有记录器,或创建一个新记录器以添加到字典中
    • 使用Ninject总是在请求时将iLogger提供程序解析为singleton提供程序
在我走这条迂回的路线之前,有没有更好的方法,也许是用ninject


感谢您的阅读。

我使用了上面描述的解决方案,但由于它是一个单例,因此最终没有必要使用ninject

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