C#在运行时启用/禁用网络跟踪?

JDE

在示例中,我可以发现通过配置文件启用了跟踪,例如

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="includehex" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="network.log"
      />
    </sharedListeners>
    <trace autoflush="true" indentsize="4" />    
  </system.diagnostics>
</configuration>

但是我不希望dll附带配置文件。此外,我需要能够启用/禁用跟踪并在代码中“即时”更改日志名称。我想出了什么:

FileStream stream = new FileStream("D:\\network1.log", FileMode.OpenOrCreate);
TextWriterTraceListener listener = new TextWriterTraceListener(stream);
Trace.Listeners.Add(listener);
Trace.AutoFlush = true;

TraceSwitch ts = new TraceSwitch("System.Net", ".Net");
ts.Level = TraceLevel.Verbose;

而且它没有记录任何内容,而且我也不知道在哪里添加开关,如果这样的话是完全正确的。侦听器可以工作,但不会获取任何数据。

我正在阅读msdn和此博客文章http://www.codeguru.com/csharp/.net/article.php/c19405/Tracing-in-NET-and-Implementing-Your-Own-Trace-Listeners.htm从我的理解来看,将其添加到Trace.Listeners侦听器后,应将所有thace信息记录在当前exe中,但事实并非如此。

那么如何实现呢?

编辑:我已经设法通过拆解TextWriterTraceListener并用反汇编的代码实现我自己的TraceListener来解决这个限制,并在Write和WriteLine方法中添加是否检查了另一个类的某些静态字段的变量,并在配置中添加了我的类型。

勒内

您不能启用对System.Net代码的跟踪,至少不能以受支持的方式。

首先让我指出,您将aTraceSwitch和a混合在一起TraceSourceTraceSource是,习惯于跟踪消息之一。TraceSwitch仅控制要记录的内容。

实例化a时,TraceSource它会通过检查<sources>system.diagnostics设置集合来检查<source>具有相同名称的a来初始化自身如果有一个实例,则使用提供的设置构建实例。然后,您的程序将使用该特定TraceSource实例通过调用TraceEvent或任何其他方法来记录其数据
如果未找到任何配置,TraceSourceDefaultTraceListener使用的SwitchLevel设置为Off进行配置。

我上面描述的内容也由内部System.Net.Logging类在其InitializeLogging方法中完成。TraceSourceSystem.Net创建自己的for System.Net实例,该实例可以按配置文件中的定义进行配置,也可以使用默认值进行配置。System.Net名称空间中的类完成的所有日志记录都使用该private / internal TraceSource

没有公共接口允许您插入或侦听TraceSource构造,因此您无法控制连接或设置共享级别(如TraceSource)上的Switch级别的侦听器。也没有进入内部System.Diagnostics.DiagnosticsConfiguration类实例的选项
我确实尝试过System.Configuration.Internal,但是我放弃了。

如果进行奇特的反射,则可以获取内部静态类型System.Net.LoggingTraceSource从static属性获取对的引用Web获得参考之后,我想您可以设置侦听器和开关级别。这是内部实现的详细信息,可能会更改,恕不另行通知,因此我不建议您这样做。

要控制日志记录,请为其中的类创建重载,System.Net然后添加您自己的TraceSource实例并将信息记录到该实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时本地启用/禁用OpenMP

来自分类Dev

在运行时禁用/启用拦截器

来自分类Dev

在运行时更改网络接口

来自分类Dev

在运行时更改网络接口

来自分类Dev

在运行时禁用 Javascript 功能

来自分类Dev

Log4J:是否可以在运行时从类启用/禁用日志记录?

来自分类Dev

在运行时动态禁用/启用页面的输出缓存

来自分类Dev

如何在运行时启用/禁用SWT文本WRAP

来自分类Dev

如何在运行时检测是启用还是禁用了KASLR?

来自分类Dev

WPF MVVM 切换按钮在运行时启用/禁用

来自分类Dev

如何使面板在运行时不绘制C#

来自分类Dev

C#在运行时后期绑定卸载Dll

来自分类Dev

c#在运行时动态创建通用列表

来自分类Dev

如何使面板在运行时不绘制C#

来自分类Dev

在运行时从C#编辑WPF ListView项

来自分类Dev

C#在运行时切换枚举

来自分类Dev

c#在运行时更改标签(控件)的位置

来自分类Dev

在运行时确定对象类型-C#

来自分类Dev

c#在运行时动态创建通用列表

来自分类Dev

C# 表单在运行时添加控件

来自分类Dev

Raspbian,SPI-TFT-Display:如何在运行时禁用fbtft并还原/重新启用/dev/spidev0.0

来自分类Dev

实时运行时禁用Google Analytics(分析)跟踪

来自分类Dev

使用JMX在运行时禁用ehcache

来自分类Dev

在运行时动态禁用休眠验证注释?

来自分类Dev

如何在运行时“禁用” require.js?

来自分类Dev

如何在运行时禁用cout输出?

来自分类Dev

在运行时从父终端临时禁用子进程

来自分类Dev

AVAudioSession在运行时禁用背景音频

来自分类Dev

在运行时处理或禁用Sitecore字段的验证