因此,我们使用具有相关ID的公共状态上下文单例进行集中式日志记录。目的是在整个过程中跟踪id并关联不同的层。
状态上下文由多个dll和多个用户访问。
当多线程发挥作用时,困难就出现了:
我们如何解决这个问题?
我们认为锁定不是我们的解决方案吗?还有其他想法吗?
这是一张图
(S)->[ CorrelationID {get;set} ]
^ ^ ^
U1 <--> | | | O
U2 <--> [DLLA] <--> [DLLB] <--> [DLLC] <--> | |
U3 <-->
{Web} <--> {Domain} <-> {Data Access} <--> {DB}
(<-- Process / Thread --> )
{} =可能的DLL示例
每个用户的进程应具有1个相关ID
答案 0 :(得分:0)
可能是,ThreadLocal&lt; T&gt;? https://msdn.microsoft.com/en-us/library/dd642243%28v=vs.100%29.aspx
答案 1 :(得分:0)
经过大量研究,我们找到了解决方案。
我们使用.Net Framework中的LogicalCallContext Class
所以LogicalCalContext类使用的是.Net Framework,它通过保留回调来保持池中的键值,即使它跳转线程。
Learn how to Flow Data across threads...
Approach for tying all NLog logs back to the original request within WebAPI
帖子中的评论引用了Serilog,所以你可能想看一下。