Не удается прочитать журналы EventProviderTraceListener с кодом - PullRequest
0 голосов
/ 06 ноября 2018

Я использую следующий код для успешного чтения журналов ETW для «ASP.NET Events» и других зарегистрированных провайдеров.

using (var session = new TraceEventSession("TraceSessionTest"))
        {
            // Set up Ctrl-C to stop the session
            Console.CancelKeyPress +=
            (object s, ConsoleCancelEventArgs args) => session.Stop();
           session.EnableProvider("ASP.NET Events");
           using (var source = new ETWTraceEventSource("ObserveProcs", TraceEventSourceType.Session))
            {
                Console.WriteLine("Listening");
                // Hook up the parser that knows about EventSources
                DynamicTraceEventParser dynamicTraceEventParser = new DynamicTraceEventParser(source);
                dynamicTraceEventParser.All += delegate (TraceEvent traceEvent2)
                {
                    Console.WriteLine("\n -------- Event: {0}", traceEvent2);
                };
              source.Process();
          }
  }

То, что я хотел бы сделать, это отслеживать исходящий запрос от определенного приложения. Для этого я добавил следующую конфигурацию в этот файл конфигурации приложения.

<system.diagnostics>
<!--<trace autoflush="true"/>-->
<trace autoflush="true" indentsize="4">
  <listeners>
    <remove name="Default" />
    <add name="EtwListener"
         type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
         initializeData="{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}" />
  </listeners>
</trace>
<sources>
  <source name="System.Net">
    <listeners>
      <!--<add name="MyTraceFile"/>
      <add name="MyConsole"/>-->
      <add name="ETWListener" initializeData="{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}"
           type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
           traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, Callstack"/>
    </listeners>
  </source>    
</sources>
<sharedListeners>
  <!--<add name="MyTraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="System.Net.trace.log" traceOutputOptions="Timestamp"/>
  <add name="MyConsole" type="System.Diagnostics.ConsoleTraceListener"/>-->
  <add name="ETWListener" type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
       initializeData="{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}" />
</sharedListeners>
<switches>
  <add name="System.Net" value="Information"/>
</switches>

Я могу просматривать журналы трассировки с помощью logman со следующими командами;

logman start "hellosession" -p '{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}' -o "hello.etl" -ets --Made some request from the application to trigger some HttpWebRequest operation. logman stop "hellosession" -ets tracerpt hello.etl -of csv -o hello1.csv

Но я не могу просматривать / читать журналы с кодом (изменение кода для руководства провайдера - указано в initializeData)

session.EnableProvider(new Guid("{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}"), TraceEventLevel.Verbose);

Это не зарегистрированный поставщик, поэтому я предполагаю, что именно поэтому я не вижу его списка поставщиков с "поставщиком запросов logman".

Есть ли что-то еще, что мне нужно, чтобы подписать EventProviderTraceListener из кода?

Обновление: я могу получить журналы трассировки исключений, такие как:

<Event MSec="447529,4150" PID="22260" PName=        "" TID="20412" IsClassic="False" ProviderName="Provider(bde5930e-34c9-4e2f-a6ec-89e1f1ea69cc)" FormattedMessage="[20412] Exception in HttpWebRequest#2155438::GetResponse - The remote server returned an error: (400) Bad Request.."/>
...