c# - 通过跟踪监听器动态更改跟踪级别

标签 c# trace

我们有一个巨大的 C# 代码库,它使用 .Net 跟踪和自定义跟踪监听器进行日志记录。我正在探索动态更改跟踪级别的选项(从警告到详细等)。我希望有一种方法可以从跟踪监听器更改跟踪级别,并且我可以修改自定义监听器以更改跟踪源上的日志级别。但这似乎不可能。有没有一种简单的方法可以从跟踪监听器中获取跟踪源对象(无需反射..)?我试图避免从 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>

最佳答案

不,没有反射就没有办法做到这一点,即使有反射也会很麻烦。

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

然而,您可以在监听器中实现“动态过滤”。

关于c# - 通过跟踪监听器动态更改跟踪级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7277062/

相关文章:

html - 建站技巧、背景图片、描图

elasticsearch - ELK堆栈数据映射功能

c# - HTML 5 视频无法从我的 MVC 网站播放

c# - 为什么我的堆栈跟踪缺少步骤?

c# - 生成资源任务失败错误

r - 检查 R 函数是否正在被跟踪?

c++ - 在 Visual Studio 中将输出锁定到输出窗口

python - 如何通过 Python 使用 Firebird 审计和跟踪服务?

c# - .NET Core 2.0 分离 Startup.cs 服务注入(inject)

c# - HttpWebRequest DefaultNetworkCredentials 给出错误 401