Dependency injection 使用上下文信息记录日志
我正在从事一个绿地项目,我想将serilog与ninject集成 用例如下所示:Dependency injection 使用上下文信息记录日志,dependency-injection,ninject,aop,postsharp,serilog,Dependency Injection,Ninject,Aop,Postsharp,Serilog,我正在从事一个绿地项目,我想将serilog与ninject集成 用例如下所示: 有许多公共库 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的GUID。这 是抽象插件类的基本属性,每个 插件继承的实现 我们希望将这个唯一的名称附加到插件生成的每个日志消息中 以及该插件对公共库的任何调用,以便 消息可以追溯到制作它的插件的唯一实例 我们不希望修改公共库中的每一个类,以获取用于记录日志的记录器 我的想法是: 创建一个单例记录器提供程序。这将被需要记录的任何东西调用。 在调
- 有许多公共库
- 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的GUID。这 是抽象插件类的基本属性,每个 插件继承的实现
- 我们希望将这个唯一的名称附加到插件生成的每个日志消息中
以及该插件对公共库的任何调用,以便
消息可以追溯到制作它的插件的唯一实例
- 我们不希望修改公共库中的每一个类,以获取用于记录日志的记录器
- 创建一个单例记录器提供程序。这将被需要记录的任何东西调用。
- 在调用日志提供程序之前,使用postsharp和CallContext.LogicalSetData设置GUID
- 使用CallContext.LogicalGetData获取singleton logger提供程序中的GUID。这将使用logger.ContextFor检索该GUID的现有记录器,或创建一个新记录器以添加到字典中
- 使用Ninject总是在请求时将iLogger提供程序解析为singleton提供程序
感谢您的阅读。我使用了上面描述的解决方案,但由于它是一个单例,因此最终没有必要使用ninject 该解决方案正在运行,而且似乎在大容量日志记录时没有任何性能问题