Alex
Alex

Reputation: 2609

How to add Socket and WinAPI tracing to .NET Core console application?

In classic .NET app, I did this by adding the following in app.config:

<system.diagnostics>
<sources>
  <source name="System.Net" tracemode="includehex" maxdatasize="1024">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.Cache">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.Http">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.Sockets">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.WebSockets">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
</sources>
<switches>
  <add name="System.Net" value="Verbose"/>
  <add name="System.Net.Cache" value="Verbose"/>
  <add name="System.Net.Http" value="Verbose"/>
  <add name="System.Net.Sockets" value="Verbose"/>
  <add name="System.Net.WebSockets" value="Verbose"/>
</switches>
<sharedListeners>
  <add name="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="network.log"/>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>

Can I achieve the same effect in .NET Core console app? In particular, I need to see which WinAPI functions are called (and which parameters are passed) during NTLM authentication with NegotiateStream class.

What I found so far is mostly about logging Web APIs in ASP.NET Core apps. My app is not ASP.NET, neither it uses any web APIs.

Upvotes: 15

Views: 1785

Answers (2)

Uğur Yıldız
Uğur Yıldız

Reputation: 51

For the new .NET 5 you may try the technique mentioned here and it uses EventListener.

Upvotes: 1

user9184600
user9184600

Reputation: 45

In .NET Core tracing works differently compared to .NET framework. The framework emits trace events through etw (in windows). To read trace events you have two choices:

  • use an external tool that can parse etw logs (dotnet-trace, perfmon, perfview, an app you wrote using the traceevent library)
  • in code, by registering a custom EventListener class. E.g see this excellent article from redhat.com: link

Upvotes: 0

Related Questions