0

当使用跟踪作为侦听器时,有没有办法Trace.CorrelationManager.ActivityId自动包含在列中?WADLogsTableSystem.DiagnosticsMicrosoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener

4

2 回答 2

1

新版本的 Azure .NET SDK 在 WAD 表中包含一个 ActivityId 列,您可以使用 EventSource 派生类包含自定义列(刚刚在 Azure SDK 2.6 上验证了这一点,尽管您需要确保您使用的是 .NET 4.5。 1,因为 .NET 4.5.0 似乎有一些导致静默失败的错误)。

对于 ASP.NET 应用程序,在 Application_BeginRequest 方法中,您将执行以下操作:

protected void Application_BeginRequest()
{
    Guid requestId = Guid.NewGuid();
    System.Diagnostics.Trace.CorrelationManager.ActivityId = requestId;
    System.Diagnostics.Tracing.EventSource.SetCurrentThreadActivityId(requestId);     
}

您可以创建自定义 EventSource 类,如下所示:

[EventSource(Name="MyCompany-MyProduct-MyEventSource")]
public class MyEventSourceWriter : EventSource
{
    public static MyEventSourceWriter Log = new MyEventSourceWriter();

    public MyEventSourceWriter()
    {
    }

    public void MyEvent(string myValue1, string myValue2, string myValue3)
    {
        if (IsEnabled())
        {
            this.WriteEvent(1, myValue1, myValue2, myValue3);
        }
    }     
}

然后,您将在您的 diagnostics.wadcfgx 文件中启用此功能,如下所示:

<EtwEventSourceProviderConfiguration scheduledTransferPeriod="PT1M" provider="MyCompany-MyProduct-MyEventSource">
    <Event id="1" eventDestination="MyEvent" />
    <DefaultEvents />
</EtwEventSourceProviderConfiguration>

然后,如果您想实际编写日志条目,您只需在代码中的任何位置执行以下操作:

MyEventSourceWriter.Log.MyEvent("Hello", "World", "That is all.");

然后,在第一次为该事件创建日志条目后(并等待适当的时间让 Azure 诊断提取日志),将创建“WADMyEvent”表,其中将包含 ActivityId、myValue1、myValue2 的列, 和 myValue3。

于 2015-05-13T04:30:08.313 回答
0

不幸的是,无法修改 WAD 收集的数据的格式。

于 2013-09-19T21:37:56.513 回答