如何将Socket和WinAPI跟踪添加到.NET Core控制台应用程序?

Ale*_*lex 11 c# trace .net-core

在经典的.NET应用程序中,我通过在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>
Run Code Online (Sandbox Code Playgroud)

我可以在.NET Core控制台应用程序中达到相同的效果吗?特别是,我需要查看在使用NegotiateStream类进行NTLM身份验证期间调用了哪些WinAPI函数(以及传递了哪些参数)。

到目前为止,我发现的主要是关于在ASP.NET Core应用程序中记录Web API。我的应用程序不是ASP.NET,也不使用任何Web API。

小智 0

与 .NET 框架相比,.NET Core 跟踪的工作方式有所不同。框架通过 etw(在 Windows 中)发出跟踪事件。要读取跟踪事件,您有两种选择:

  • 使用可以解析 etw 日志的外部工具(dotnet-trace、perfmon、perfview、您使用Traceevent 库编写的应用程序)
  • 在代码中,通过注册自定义EventListener类。例如,请参阅 redhat.com 上这篇优秀的文章:链接