无法理解 .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 的相关文章

  • 将 C# 字符串传递给非托管 C++ DLL

    我有一个简单的应用程序 它加载一个非托管 dll 并从 C 向它传递一些字符串值 但在 C dll 应用程序中 我收到异常 试图访问读 写保护的内存 我的 DLL 导入如下所示 DllImport X dll CallingConventi
  • 为什么该字符串的长度比其中的字符数长?

    这段代码 string a abc string b A C Console WriteLine Length a 0 a Length Console WriteLine Length b 0 b Length outputs Lengt
  • 如何在 WPF 应用程序中实现气球消息

    我们想使用气球消息 如UX Guide http msdn microsoft com en us library aa511451 aspx来自微软 我发现一些示例使用 Windows 窗体中的本机代码 但本机代码需要组件的句柄 这对于
  • 标签中的路径显示

    NET 中有没有自动修剪路径字符串的方法 例如 C Documents and Settings nick My Documents Tests demo data demo data emx becomes C Documents dem
  • C# 中单个 & 符号的第二个含义是什么?

    我在 C 中使用了单个与号 来表示 检查second条件语句即使第一个是false 但以下似乎是不同的意思 of 总而言之 谁能解释一下如何i 1在下面的例子中有效吗 List
  • 对 URL 进行编码 C#

    所以我有一个看起来像这样的 URL http www test com folder1 id 3 但基本上 当他们单击按钮时 我想在 URL 栏中显示与该 id 关联的值的名称 例如 id 3 是名为 Rollex 的手表 所以我想要读取
  • 使用 ContractNamespace 属性设置 WCF DataContract 命名空间

    在设计我的服务时 我决定要自定义出现在生成的 WSDL 中的名称空间 对于数据合同 我遇到了合约命名空间 http msdn microsoft com en us library system runtime serialization
  • 从远程托管上的 PHP 获取 PHP 错误日志

    是否有 PHP 函数或其他方式以字符串形式获取 PHP 错误日志 我需要这个 因为我无法访问在其他人的服务器上运行的站点的错误日志 他提出通过电子邮件将错误日志发送给我 但这不太方便 有什么方法可以将错误日志输出到 PHP 页面吗 我意识到
  • 目标中的 clr.dll 版本与构建的 mscordacwks.dll 版本不匹配

    我正在使用 NET Framework 4 0 开发 ASP NET MVC 3 应用程序 当我去调试我的应用程序时 我收到消息 无法附加到应用程序 webdev webserver 目标中的 clr dll 版本与构建 mcordacwk
  • 列出运行时从开放泛型类型创建的封闭类型

    当我列出当前 AppDomain 中的所有类型时 我会看到带有通用占位符的通用类型 但是 如果我使用类型实例化泛型类型 然后列出 appDomain 中的所有类型 则我看不到新创建的封闭类型 在下面的示例中 输出仅为 Foo 1 T 我正在
  • 自定义Visual Studio的项目上下文菜单

    我正在使用带有一些加载项和扩展的 Visual Studio 2010 现在的问题是 解决方案资源管理器中项目项的上下文菜单变得如此之大 以至于我总是必须向下滚动才能找到我最常使用的 属性 和 在 Windows 资源管理器中打开 这变得非
  • C# 无法访问已释放的对象

    我正在制作一个服务器 客户端应用程序 我将服务器套接字设置为侦听 并设置 BeginAccept 方法 当我关闭服务器套接字 Socket Close 以关闭服务器时 BeginAccept 方法的异步回调方法抛出异常 我检查了异常 发现异
  • 无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一

    首先 它不仅仅是重复的 以下问题的答案都不适合我 http goo gl tS40cn http goo gl tS40cn http goo gl pH6v2T http goo gl pH6v2T 我刚刚使用 Nuget 包管理器更新了
  • 如何将 SyndicateElementExtension 添加到 SyndicateItem

    使用 NET System ServiceModel Syndicate 类 我想向 SyndicateItem 添加一个新的 SyndicateElementExtension 它将导出以下 XML
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • .NET Core == .NET Framework 5 吗?

    我一直在寻找书籍来研究最新的 NET Framework 据我所知 NET 最高为 4 6 但 ASP NET 最高为 5 核心 NET Core 是 NET 5 的名称还是我们目前仍使用 NET 4 6 去引用斯科特 汉塞尔曼 http
  • 如何在 Visual Studio 2010 中处理 TODO 注释?

    我希望 Visual Studio 列出开头包含 TODO 的所有行 通常在注释符号之后 注释符号可能会根据文件类型而变化 这些行可以在解决方案中的任何文本文件中找到 无论是 C VB F T SQL ASPX XAML 或只是 TXT 在
  • C# 要么返回 false 要么什么也不做

    我想知道是否有办法不必重复相同的事情如果施工而是调用一个状态检查 成功后无法返回true 有人知道这个问题更好的标题吗 bool Enable if GetStatus ref status Trace WriteLine Error re
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod

随机推荐

  • 在哪里初始化托管 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 个跟踪级别 开关 详细 警告和无 在代码的调试版本中 我希望详细开关处于活动状态 在发布版本中我希望发出警告 在特殊情况下 我的应用程序用户可以修改配置文件以禁用所有跟踪 我希望调试跟踪输出在