从.NET框架内部记录(Logging.On)

Joe*_*oeB 2 .net asp.net logging frameworks

我正在调试一些意外的行为,在跟踪.NET框架时,我看到一堆这样的东西:

        if (Logging.On) { 
            Logging.PrintInfo(Logging.Web, this, SR.GetString(SR.net_log_n_certs_after_filtering, filteredCerts.Count));
             …
        }
Run Code Online (Sandbox Code Playgroud)

但是(正如默认预期的那样)执行步骤就在这些上面.有没有办法打开日志记录?或者这只是框架开发人员在构建框架的特殊构建时可以做的事情?

Jef*_*ser 5

反射周围显示Logging.On由'flag'启用

s_WebTraceSource = new NclTraceSource("System.Net");
s_HttpListenerTraceSource = new NclTraceSource("System.Net.HttpListener");
s_SocketsTraceSource = new NclTraceSource("System.Net.Sockets");
s_CacheTraceSource = new NclTraceSource("System.Net.Cache");
try
{
   flag = ((s_WebTraceSource.Switch.ShouldTrace(TraceEventType.Critical) || s_HttpListenerTraceSource.Switch.ShouldTrace(TraceEventType.Critical)) || s_SocketsTraceSource.Switch.ShouldTrace(TraceEventType.Critical)) || s_CacheTraceSource.Switch.ShouldTrace(TraceEventType.Critical);
}
Run Code Online (Sandbox Code Playgroud)

这意味着它正在使用标准跟踪,只是检查是否至少正在监视"关键"级别.有关如何使用它的示例可以在本MSDN文章的"调试套接字应用程序"部分中找到,如下所示:

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net.Sockets">
        <listeners>
          <add name="Sockets"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net.Sockets" value="31" />
    </switches>
    <sharedListeners>
    <add name="Sockets" type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="Sockets.log"/>
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

正如文章所解释的那样,开关值是这五个值的按位OR:

  • 网络流量(0x10)
  • 方法进入和退出(0x8)
  • 警告(0x4)
  • 错误(0x2)
  • 严重事件(0x1).

如果你或者所有这些(0x10 | 0x8 | 0x4 | 0x2 | 0x1)你得到0x1F,如上所示十进制为"31".

使用应用程序配置文件设置的详细信息,可以发现在这里.它应该只是创建一个app.config或web.config文件,类似于上面的那个你将使用的源文件.