gpt4 book ai didi

c# - 使用 CorrelationManager 链接多个 TraceSource 事件

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:40 24 4
gpt4 key购买 nike

我正在使用 .NET WebAPI 在 C# 中开发 Web 服务,我想将每个请求的多个事件记录到 Windows 事件日志中。由于该服务在多线程模型中运行并且每秒将接收数百个请求,因此我需要能够按请求对日志条目进行分组,以便我可以查看失败请求的所有条目。

计划是为每个具有严重级别(详细/信息/错误/警告/严重)的请求和日志事件生成一个唯一的 ID (Guid),包括每个日志条目中的 ID,以便我可以对事件进行分组.

尝试使用 NLog 后,我开始研究 System.Diagnostics.TraceSourceSystem.Diagnostics.Trace.CorrelationManager.ActivityId 的结合,在网上找到许多文章在这里。日志记录有效,但我遇到了两个问题。

我的 web.config:

<system.diagnostics>
<sources>
<source name="My.App" switchValue="Verbose, ActivityTracing">
<listeners>
<add name="eventlogListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="eventlogListener" type="System.Diagnostics.EventLogTraceListener" initializeData="MyAppCategory" />
</sharedListeners>
</system.diagnostics>

问题一

  • 如果我使用 TraceTransfer,我可以指定 ActivityId(即自动附加到消息中)但我无法指定事件级别(例如TraceEventType.Error)
  • 如果我使用 TraceEvent 我可以指定级别但不能指定 ActivityId,并且 Activity Id 不会出现在任何地方

有没有办法在日志事件中同时拥有级别和事件 ID?

问题2

我想在事件查看器的“Correlation Id”列中查看 ActivityId,以便对事件进行分组。我见过一些应用程序在那里存储一个 Guid,但我还没有找到任何关于如何在 C#/.NET 中实现相同目的的文档。我注意到 TraceEvent 接受一个 object[] args 参数,不过我还没有找到任何示例。

谁能给我指出一些文档或提供一个工作示例?

谢谢

最佳答案

traceOutputOptions 属性添加到您的 eventlogListener 定义中:

traceOutputOptions="LogicalOperationStack"

结果元素将是:

<add name="eventlogListener" type="System.Diagnostics.EventLogTraceListener" initializeData="MyAppCategory" traceOutputOptions="LogicalOperationStack"/>

结果输出将与此非常相似:

testtrace Start: 0 : Main task started
LogicalOperationStack=Main
testtrace Information: 0 : Doing work for id 0
LogicalOperationStack=0, Main

注意输出如何为您提供嵌套的逻辑操作堆栈。在此示例中,操作 0 在单独的线程中启动。

关于c# - 使用 CorrelationManager 链接多个 TraceSource 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com