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

时间:2017-02-20 09:34:33

标签: c# .net-core tracing

在经典的.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>

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

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

2 个答案:

答案 0 :(得分:1)

对于新的 .NET 5,您可以尝试提到的技术 here,它使用 EventListener。

答案 1 :(得分:0)

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

  • 使用可解析etw日志的外部工具(dotnet-trace,perfmon,perfview,使用traceevent library编写的应用)
  • 通过注册自定义EventListener类在代码中
  • 。例如,从redhat.com上看到这篇出色的文章:link