无法理解 .net 2010 跟踪和 app.config

2023-11-30

在我的 app.config 中,我想设置 3 个跟踪级别(开关?):详细、警告和无。 在代码的调试版本中,我希望详细开关处于活动状态,在发布版本中我希望发出警告。在特殊情况下,我的应用程序用户可以修改配置文件以禁用所有跟踪。

我希望调试跟踪输出在控制台上,而发布跟踪仅输出到日志文件。

我写了以下内容:

[...]
<system.diagnostics>
        <sources>
            <!-- This section defines the logging configuration for My.Application.Log -->
          <source name="debug" switchName="debug">
            <listeners>
              <add name="FileLog"/>
              <add name="console"/>
            </listeners>
          </source>

          <source name="release" switchName="release">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>

          <source name="silent" switchName="none">
            <listeners/>
          </source>
        </sources>


        <switches>
            <add name="debug" value="Verbose"/>
            <add name="release" value="Warning"/>
            <add name="none" value="Off"/>
        </switches>


        <!--<sharedListeners>
            <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener"  traceOutputOptions="DateTime" initializeData="felix.log"/>
            <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
        </sharedListeners>-->

        <trace autoflush="false" indentsize="4">
          <listeners>
              <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/>
              <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/>
              <remove name="Default"/>
          </listeners>
        </trace>

    </system.diagnostics>
[...]

然后在代码中我这样调用跟踪:

Public Shared Sub HandleException(ByVal ex As Exception)
   Trace.WriteLine(ex.Message, "Error")

[...]

我想我缺少一些东西。我该如何告诉 Trace 方法使用正确的开关?我的应用程序用户如何更改配置文件以允许跟踪或禁用它?

Thanks.


您似乎将通过 Trace.Write 和 Trace.WriteLine 进行日志记录/跟踪的概念与使用 TraceSource 对象进行日志记录/跟踪的概念混合在一起。

TraceSource 对象允许您拥有可单独控制(通过开关)的“日志记录对象”,这样您就可以为某些代码打开日志记录,并为代码的其他部分关闭日志记录。 TraceSource 对象的输出可以配置为转到不同的 TraceListener(或相同的 TraceListener)。 Trace.WriteLine 并不是非常灵活。它只能配置为一个级别(即,在全局范围内,您可以在“调试”或“信息”或其他任何位置进行日志记录),而使用 TraceSources,一个 TraceSource 可以在“调试”处进行日志记录,另一个可以在“信息”处进行日志记录,而另一个可以完全关闭。

请参阅这些链接中我的答案,了解如何配置 TraceSource 以及如何在代码中使用它们的一些示例。

如何跨类使用TraceSource

通过 app.config 关闭跟踪

最好的日志记录方法是什么?

将 Trace 方法添加到 System.Diagnostics.TraceListener

关于您希望跟踪/日志记录在调试与发布中如何工作,您可以有两个不同的 app.config 文件。两者都会定义相同的 TraceSource(即同一组“命名”跟踪/日志记录对象)。在与调试版本一起使用的 app.config 中,您可以将跟踪/日志记录级别设置为一个值 Debug/Info/Whatever,并且您可以将输出定向到控制台和/或文件和/或其他内容。在与调试版本一起使用的 app.config 中,您可以将跟踪/日志记录级别设置为不同的值(或关闭)并将输出定向到文件。

在上面的两篇文章中,我都包含了有关 System.Diagnostics 信息的其他几个链接,包括Ukadc.诊断项目。该项目提供了一个非常有趣的格式化功能,可与基于 System.Diagnostics 的 TraceListener 一起使用(前提是侦听器来自 Ukadc.Diagnostics),而无需对实际跟踪/日志记录语句进行任何更改。格式化功能与 log4net 和 NLog 提供的类似。

阅读我上面链接的信息,看看是否有帮助。尝试使用 TraceSources 而不仅仅是 Trace.WriteLine。当您对此感到满意时,也许可以查看 Ukadc.Diagnostics。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法理解 .net 2010 跟踪和 app.config 的相关文章

  • 链接 .Net 程序集

    这都是假设 所以请耐心等待 假设我正在用 C 编写一个名为 Foo 的工具 输出是 foo exe 我发现了一些我喜欢使用的非常棒的库 称为 Bar 我可以在我的项目中将其引用为 bar dll 当我构建项目时 我的输出目录中有 foo e
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 创建 Visual Studio 风格的选项/设置对话框

    我目前正在改进 winforms 应用程序的选项对话框 目前我正在使用选项卡控件 我想为类似于 Visual Studio 的设置创建一个表单 对话框 这是怎么做到的 我可以在左侧看到类似树视图的控件 但是他们使用什么控件来显示每个选项页面
  • C#.NET 中的 App.config 是什么?如何使用它?

    我在 C NET 中完成了一个项目 其中我的数据库文件是 Excel 工作簿 由于连接字符串的位置在我的编码中是硬编码的 因此在我的系统中安装它没有问题 但对于其他系统则有问题 有没有办法在应用程序设置完成后提示用户设置一次路径 我得到的答
  • 看起来 MSVS 11.0 Beta 破坏了 MSVS 10.0 安装

    安装 MSVS 11Beta 后 我的 MSVS 10 遇到了编译问题 现在 当我在 MSVS 10 中编译 C 项目 在 MSVS 10 中创建的项目 目标框架 3 5 时 出现错误MSB4216 MSB4028输出窗口中包含以下文本 1
  • 使用 C++/CLI 包装非托管 C++ 类库 - 问题 2 - 集合

    Note 这篇文章代表了我的询问的问题 2 两个问题中都会重复介绍部分 达到数字之前的所有文本 因为它是回答问题可能需要的背景信息 问题简介 我有一个非托管 C 库 其中包含多个 更高级别 库所共有和共享的类和函数 我现在需要向 C Net
  • 如何确定任务栏位于哪个屏幕

    Screen PrimaryScreen 并不总是有效 因为在多显示器设置中 用户可能会将其任务栏移动到主屏幕以外的屏幕 找到具有最小工作区域的屏幕也不起作用 因为可能存在具有不同分辨率的显示器 有什么办法可以通过任务栏定位屏幕吗 您可以使
  • Outlook 2007 捕获 ReplyToAll 事件的共享加载项

    我正在使用 VS 2010 和 Dot Net Framework 2 0 我已在 扩展性 gt Outlook 共享加载项 中创建了一个项目 我正在尝试捕获 ReplyToAll 事件 但它没有被解雇 请看下面的代码 连接方法 inspe
  • 字符串索引和替换

    我今天刚刚遇到这个问题 想知道是否有人知道为什么这个测试可能会失败 取决于文化 目的是检查测试文本是否包含两个相邻的空格 这是根据string IndexOf 即使我告诉字符串替换所有出现的两个相邻空格 经过一些测试似乎 xAD以某种方式导
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 实体框架:ObjectSet 及其(泛型)方差

    我使用 EntityFramework POCO 事情是这样的 public interface IBaseType int Id get set public class BaseType IBaseType public virtual

随机推荐

  • 在哪里初始化托管 C++/CLI DLL?

    使用 C CLI 创建 DLL 时 或者我应该问 是否存在与 DllMain 等效的东西 这段初始化代码中不能调用的内容是否有任何限制 Dan 关于加载器锁 C CLI 的 CLR 延迟加载以及混合模式二进制文件的正确初始化 我昨天刚刚在这
  • Pyqt:从函数“动态”附加到 qtextedit

    我的 pyqt gui 中有一个按钮 单击该按钮会运行一个函数 该函数会执行一些冗长的数学计算 在这个函数中有很多打印语句 例如 print finished calculating task1 going on to task2 因此 通
  • java中用simplexml反序列化xml

    我正在尝试使用 SimpleXML 反序列化 xml 字符串 我查看了他们的示例 但我不确定我是否掌握了这个概念 示例 XML 验证
  • 生成不带foreignObject标签的svg

    我在用dom to image js插入 问题是 它会生成一个
  • 如何从HttpClient获取json文件?

    我正在尝试获得一个json文件来自HttpClient 但是当我添加时出现错误 subscribe imports import Injectable from angular core import HttpClient HttpHead
  • 检查文件中的行是否以特定字符串开头 - 进行一些计算

    所以这就是我想做的 我有一个巨大的文件 我想在 python 中打开它并查看每一行 如果它与某个预定的字符串匹配 我想获取紧随该字符串之后的数字 将它们全部加起来并得到平均值 该文件如下所示 Data Number of hours 34
  • 在 wpf 中拖放路径

    是否可以使用鼠标事件处理程序在 wpf 中拖放路径 特别是 我想用鼠标左键拖动路径并将其放置在网格上 如何才能做到这一点 尝试这个 鉴于 文本框名称为 TextBox1 public MainWindow Initialize UI Ini
  • 如何避免 Qt app.exec() 阻塞主线程

    我是 Qt 新手 但需要解决一个难题 我创建了一个非常简单的 GUI 我需要将其添加到现有的 C 应用程序中 问题是 我只编写了一个插入更大架构的模块 这限制了我对主线程的访问 我的代码必须驻留在以下四个函数中 Init 函数 在主线程中运
  • 到底如何在后台线程上渲染 Metal?

    这个问题是由用户界面交互引起的 例如全屏显示标题栏 该问题的答案提供了解决方案 但没有提供如何解决实施那个解决方案 解决办法是在后台线程上渲染 问题是 苹果提供的代码涵盖了很多内容 所以大部分都是无关的代码 所以即使我能理解它 使用苹果的代
  • 在 Django 中提交表单时不会调用基于通用类的视图中的 post 方法?

    我写了一个 mixin 来覆盖POST and get from kwargs of CreateView 我在做AJAX提交我的表格 我看到get from kwargs通过在控制台上打印来调用 但没有其他方法 例如post form v
  • Espresso 和 Android 联系人选择器

    我尝试使用 Espresso 的 Android 联系人选择器添加联系人 但这不起作用 这是调用联系人选择器的命令 Intent intent new Intent Intent ACTION PICK ContactsContract C
  • 实体框架/Linq to SQL:跳过并获取

    只是好奇 Skip Take 应该如何工作 我得到了我想要在客户端看到的结果 但是当我连接 AnjLab SQL Profiler 并查看正在执行的 SQL 时 它看起来好像正在查询并将整个行集返回到客户 它真的会返回所有行 然后在客户端使
  • 从 WebBrowserControl 中单击的 HtmlElement 获取 XPath

    如何从 WebBrowserControl 中单击的 HtmlElement 获取 XPath 这是我检索单击的 HtmlElement 的方法 System Windows Forms HtmlDocument document this
  • 在Java中,是否有一个Runnable版本旨在在当前线程中执行?

    JavaDoc for Runnable 状态 已添加强调 Runnable 接口应该由任何其类实现 实例旨在由线程执行 该类必须定义一个名为 run 的无参数方法 该接口旨在为希望在活动时执行代码的对象提供通用协议 例如 Runnable
  • 在Python中重新组织数组元素

    如何重新组织元素A shape 1 7 2 生成新数组A1 shape 1 7 2 按增加的顺序j In A 0 0 array 0 1 j指的是1 in 0 1 如果有一些非常通用的东西那就太好了 这样代码就可以处理形状为A变得非常大 比
  • 如何找到已弃用方法的替代方法?

    我是 Android 编程新手 我一直在关注有关创建音乐播放器的教程这个网站 本教程要求setAudioStreamType方法来自MediaPlayer类是已弃用 哪种方法特别替代了这个已弃用的方法 并且 是否有一个来源可以让我们找到所有
  • p:commandButton 操作和 f:setpropertyactionlistener 未在 p:columngroup 中调用

    我需要将子组件放入 primefaces 子表页脚 p columngroup type footer 中 但标准子表渲染器不提供这样的机会 所以我重写了 org primefaces component SubTableRenderer
  • 如何保护我的 Python 代码库,以便访客看不到某些模块,但它仍然可以工作?

    我们正在用 Python 启动一个新项目 其中包含一些我们希望保密的专有算法和敏感逻辑 我们还将有一些外部人员 精选的公众成员 参与代码工作 我们不能授予外部人员访问小型私有代码的权限 但我们希望公共版本能够为他们提供足够好的工作空间 假设
  • 使用 TypeScript 类编写 Angular 指令

    我可能只是试图一次结合太多 新的 概念 但我正在尝试使用 TypeScript 类编写自定义 Angular 指令 目前 我并不想做任何非常有用的事情 只是做一个 POC 我有一个如下所示的 TypeScript 文件 module App
  • 无法理解 .net 2010 跟踪和 app.config

    在我的 app config 中 我想设置 3 个跟踪级别 开关 详细 警告和无 在代码的调试版本中 我希望详细开关处于活动状态 在发布版本中我希望发出警告 在特殊情况下 我的应用程序用户可以修改配置文件以禁用所有跟踪 我希望调试跟踪输出在