通过跟踪侦听器动态更改tracel级别

时间:2011-09-01 22:01:36

标签: c# tracing

我们有一个巨大的C#代码库,可以使用.Net跟踪和自定义跟踪侦听器进行日志记录。我正在探索动态更改跟踪级别的选项(从警告到详细等)。我希望有一种方法可以从跟踪侦听器更改跟踪级别,我可以修改自定义侦听器以更改跟踪源上的日志级别。但这似乎不可能。有没有一种简单的方法可以从跟踪侦听器中获取traceource对象(没有反射..)?我试图避免从TraceSource派生来实现动态跟踪级别,因为它将涉及大量的代码更改。有什么建议吗?

以下是我们追踪的典型方式:

        TraceSource ts = new TraceSource("TestLogSource");
        ts.TraceEvent(TraceEventType.Warning, 0, "warning message");
        ts.TraceEvent(TraceEventType.Error, 0, "error message");

<system.diagnostics>
        <sources>
            <source name="TestLogSource" switchName="GlobalSwitch">
                <listeners>
                    <add name="TestLog"/>
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add name="TestLog" initializeData="test.svclog" type="Library.RolloverXmlTraceListener, Library, Version=4.0.0.0, Culture=neutral, PublicKeyToken=1234.."/>
        </sharedListeners>
        <switches>
            <add name="GlobalSwitch" value="Warning" />
        </switches>
    </system.diagnostics>

1 个答案:

答案 0 :(得分:3)

不,如果没有反思,就没有办法做到这一点,即使有了反思也不会有麻烦。

TraceSource在根据它的Switch属性调用侦听器之前进行过滤,并且无法在没有反射的情况下从TraceListener获取源TraceSource对象,因此您要求的是不可行的(并不意味着)

但是,您可以在侦听器中实现“动态过滤”。