c# - 使用 nlog MDLC 进行子与父通信
问题描述
我们有一组使用 ASP.NET 5 和 .NET 5 的 Web 服务。它们的签名是由外部实体强加的,它们都有一些我们希望在每个日志行上记录的通用参数。
但是,对于每个服务,其中一些参数的指定方式不同(一些在 POST 数据中,一些在查询字符串中......)。我们必须通过异步调用从数据库中获取一些数据,以便将其中一些数据转换为值得记录的数据。
我们在 ASP.NET 过滤器中使用 nlog MappedDiagnosticsLogicalContext (MDLC) 来使用一些常用参数初始化 MDLC。此过滤器还执行其他一些操作,例如记录通话结束。对于那些在服务之间不常见的参数,我们在每个服务控制器中调用一个异步方法,该方法将从数据库中验证和转换它们(因此具有异步性质)。如果我们在此方法中设置 MDLC(这很酷,因为我们希望避免重复代码),它不起作用,因为 MDLC 是 AsyncLocal - 不允许从子上下文(AFAIK)进行通信。
问题是:我们如何才能使 async 方法找到的值在过滤器创建的最终日志消息中使用?因此,孩子对父母的 MDLC 价值观“冒泡”?
解决方案
推荐阅读
- python - 如何通过Python中的行列表获取切片二维数组
- javascript - 以整数数组为参数的 axios 补丁
- jboss - JBOSS eap 7.1中分配JVM参数的正确方法
- html - 创建的新 div 未显示 ID
- libvlc - 在 Android 中将程序 ID (sid) 动态设置为 LibVLC
- r - R:如何将多边形的直线和线段与极坐标结合起来?
- css - 使用 sass 算术运算符时出现 W3c 验证错误
- jquery - 我想从动态创建的 span 元素中使用 jquery 获取 data-id 和 data-test 的值
- ssis - 在 SSIS 中 Union-all 后记录数下降
- docker - 在 Jenkins 上执行 shell 脚本时作业随机失败