首页 > 解决方案 > 使用 nlog MDLC 进行子与父通信

问题描述

我们有一组使用 ASP.NET 5 和 .NET 5 的 Web 服务。它们的签名是由外部实体强加的,它们都有一些我们希望在每个日志行上记录的通用参数。

但是,对于每个服务,其中一些参数的指定方式不同(一些在 POST 数据中,一些在查询字符串中......)。我们必须通过异步调用从数据库中获取一些数据,以便将其中一些数据转换为值得记录的数据。

我们在 ASP.NET 过滤器中使用 nlog MappedDiagnosticsLogicalContext (MDLC) 来使用一些常用参数初始化 MDLC。此过滤器还执行其他一些操作,例如记录通话结束。对于那些在服务之间不常见的参数,我们在每个服务控制器中调用一个异步方法,该方法将从数据库中验证和转换它们(因此具有异步性质)。如果我们在此方法中设置 MDLC(这很酷,因为我们希望避免重复代码),它不起作用,因为 MDLC 是 AsyncLocal - 不允许从子上下文(AFAIK)进行通信。

问题是:我们如何才能使 async 方法找到的值在过滤器创建的最终日志消息中使用?因此,孩子对父母的 MDLC 价值观“冒泡”?

标签: c#asp.netasync-awaitnlog

解决方案


推荐阅读