具有相关活动ID的EventSource跟踪

Chr*_*ler 5 c# etw async-await .net-4.5

我已经开始使用ETW和Entlib 6中的进程外语义日志记录块。当我使用async / await时,未在延续线程上设置CurrentThreadActivityId,并且TPL框架不会记录传输事件。这使得执行端到端跟踪非常困难。

根据Microsoft的文档,TPL框架应该记录一个传输事件并生成一个新的activityid,但是我似乎无法使其正常工作。

Entlib 6中的文档

这是一个显示问题的小例子:

要记录TPL事件,我使用以下方法:

<eventSource name="System.Threading.Tasks.TplEventSource" level="Informational" matchAnyKeyword="1"/>
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AsyncContextTest
{
    class Program
    {
        static Guid _activityId = Guid.NewGuid();

        static void Main(string[] args)
        {
            EventSource.SetCurrentThreadActivityId(_activityId);
            Console.WriteLine(EventSource.CurrentThreadActivityId);
            Task t = Task.Run(async () => await DoStuffAsync());
            Console.WriteLine(EventSource.CurrentThreadActivityId);

            Console.Read();
        }

        public static async Task DoStuffAsync()
        {
            var x = "one,two,three".Split(',');
            Console.WriteLine(EventSource.CurrentThreadActivityId);
            await Task.Delay(1000);
            Console.WriteLine(EventSource.CurrentThreadActivityId);
            var y = String.Join(",", x);

            Console.WriteLine("Done");

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果

334540cc-ccb1-4196-8587-815abf237e4c
334540cc-ccb1-4196-8587-815abf237e4c
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
Done
Run Code Online (Sandbox Code Playgroud)

没有人有一个简单的示例显示使用ETW和async / await进行端到端跟踪的正确方法吗?

编辑:

我能够使用进程内侦听器正常运行,但不能使用进程外侦听器正常运行。TPL没有记录任何内容。

Chr*_*ler 1

更改配置以使用事件源的 GUID 而不是名称。

<eventSource id="2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5" level="Informational" />
Run Code Online (Sandbox Code Playgroud)

输出将如下所示:

605e615a-c849-4ee7-95b8-e6677f945c3f
605e615a-c849-4ee7-95b8-e6677f945c3f
00000001-0001-0000-0c22-0000ffdcd7b5
00000002-0001-0000-0c22-0000ffdcd7b5
Done
Run Code Online (Sandbox Code Playgroud)

有没有人有一个简单的示例来展示使用 ETW 和 async/await 进行端到端跟踪的正确方法?

还在寻找...