背景:
Microsoft.Extensions.Logging
的“后端”。class T
通过 DI 接收 ILogger<T>
。T
在多种 async
方法中执行各种活动(例如 M1Async
、M2Async
)并大量记录日志。T
发出的每条消息的“全局状态”。T
与应用程序中的其他类共享 Serilog 配置,因此仅应用于 T
的自定义丰富器有点不切实际。logger.BeginScope()
来创建全局状态,每次它发生变化时,我(处理旧的并)重新创建它。T
的方法的角度来看,状态是全局的(仅驻留在私有 r/w 成员中)。让我们有以下场景:
T
的实例,构建了loggerScope
(如logger.BeginScope()
)。M1Async
被调用,记录一些内容(发出预期的 loggerScope
的内容)。M1Async
检测状态更改并使用新内容重新创建 loggerScope
并退出。M2Async
被调用,记录一些内容(发出意想不到的原始 loggerScope
的内容,而不是 M2Async
准备的内容)。全局状态背后的整个想法是:
loggerScope
娱乐。问题: