首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用System.Diagnostics编程设置源开关

如何用System.Diagnostics编程设置源开关
EN

Stack Overflow用户
提问于 2014-12-04 22:16:11
回答 2查看 1.3K关注 0票数 1

我遇到了需要从System.Workflow.Activities.Rules捕获跟踪的情况。目前,我在代码中配置了一个自定义跟踪listner,如下所示:

代码语言:javascript
复制
    _traceListener = new InMemoryTraceListener();
    System.Diagnostics.Trace.Listeners.Add(_traceListener);

在app.config中,我的源开关配置如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <switches>
      <add name="System.Workflow.Activities.Rules" value="Information"/>
    </switches>
  </system.diagnostics>
</configuration>

这是可行的,而且我能够在我的自定义跟踪监听器中捕获种族消息。我需要跟踪信息,因为它对整个解决方案至关重要,并且设置在所需的级别上。

但是,由于我需要以编程方式配置开关,而不是将其作为GAC的dll配置。

我用SourceSwitch和TraceSource尝试过许多不同的东西,但是没有一个对我有用。

编辑:--总之,我想从.net框架中编程地为现有的源代码配置一个开关,这样我就可以监听跟踪消息了。

EN

回答 2

Stack Overflow用户

发布于 2014-12-09 19:55:45

我已经修改了一些代码,这些代码可以实现类似的功能。它通过对非公共方法的反射来设置开关。这不是最佳实践,但还有更好的方法吗?

代码语言:javascript
复制
 #region Dodgy dodgy hackery. There has to be a better way of doing this ....
 var trace = typeof(System.Workflow.Activities.StateActivity)
                .Assembly
                .GetType("System.Workflow.Activities.WorkflowActivityTrace");

 var rules = trace.GetProperty("Rules", BindingFlags.NonPublic | BindingFlags.Static)
                .GetValue(null, null)
                as System.Diagnostics.TraceSource;

 rules.Switch.Level = System.Diagnostics.SourceLevels.Information;

 rules.Listeners.Clear();
 rules.Listeners.Add(_traceListener);
 #endregion
票数 3
EN

Stack Overflow用户

发布于 2014-12-04 22:48:47

我想你是在找TraceSource类,然后做一些类似的事情

代码语言:javascript
复制
TraceSource mySource = new TraceSource("MySource");
mySource.Listeners.Add(new InMemoryTraceListener());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27305186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档