首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于类的System.Diagnostics跟踪源

基于类的System.Diagnostics跟踪源
EN

Stack Overflow用户
提问于 2014-07-29 13:24:26
回答 2查看 708关注 0票数 1

我目前正从log4net作为日志框架迁移到System.Diagnostics命名空间,以便使用1)已经可用的.net内置框架;( b)使用它的强大功能,如活动跟踪。

对于log4net,我习惯于以基于类的方式请求记录器。

代码语言:javascript
运行
复制
private readonly ILog Logger = LogManager.GetLogger(typeof(MyClass).Name);

但是,对于TraceSource,似乎必须在app.config中手动配置每个跟踪源才能使用它。难道没有一种方法可以创建一些共享侦听器并只使用它们,为TraceEventType等提供“全局筛选器”(例如,EventLogListener处理警告/错误,当设置属性"XY“时,控制台侦听器处于活动状态,否则日志到文件等等)。

EN

回答 2

Stack Overflow用户

发布于 2014-07-29 18:06:35

我不认为System.Diagnostics中有任何东西可以提供这种功能(我特别想到的是不必显式配置app.config文件中的每个单独的TraceSource的能力)。但是,如果您不介意编写一点代码,您可以编写自己的包装器来提供“分层TraceSource”功能。看看卡塞尔在他们的TraceLogger中做了什么:

https://github.com/castleproject/Core/blob/master/src/Castle.Core/Core/Logging/TraceLogger.cs

让我们假设您有以下类(以及相关的命名空间):

代码语言:javascript
运行
复制
Namespace1.Namespace1_1.Class1
Namespace1.Namespace1_1.Class2
Namespace1.Namespace1_2.Class3
Namespace2.Namespace2_1.Class4
Namespace2.Namespace2_2.Class5

城堡的实现将允许您使用完整的类名或使用类名的子集(从名称空间末端开始)配置TraceSource (在app.config中)。

因此,例如,您可以通过将“TraceSources”指定为"Namespace1.Namespace1_1“作为TraceSource名称来配置,从而使来自Namespace1.Namespace1_1的所有TraceSource都记录在一定级别上。在您的代码中,如果您创建一个TraceSource (或者实际上创建一个包装的TraceSource),其全名为Class1Class2,那么TraceSource将记录在为Namespace1.Namespace1_1配置的级别上。

试着看看城堡的TraceLogger实现,看看你能不能让类似的东西为你服务。

票数 1
EN

Stack Overflow用户

发布于 2014-07-29 16:25:53

这是一个样本。您可以设置共享侦听器。因此,给定的侦听器只需要配置一次。(您仍然需要多次将侦听器映射到源)

源可以使用命名交换机,并且应该是可共享的(即两个源使用相同的开关)。

在你的问题中,你使用了“过滤器”这个词,它大致相当于一个开关值。过滤器也存在于Systems.Diagnostics跟踪中,但它们是根据各种标准(而不仅仅是开关值)减少侦听器响应的数量的对象。

代码语言:javascript
运行
复制
 <system.diagnostics>
      <switches>
          <add name="IdentityStuff" value="Verbose"/>
          <add name="OtherStuff" value="Verbose"/>
      </switches>
    <sources>
      <source name="Microsoft.IdentityModel" switchName="IdentityStuff" >
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>
      <source name="SomeOtherSource" switchName="IdentityStuff" >
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>
    </sources>
      <sharedListeners>
          <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="WIFTrace.e2e" />
      </sharedListeners>
  </system.diagnostics>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25016446

复制
相关文章

相似问题

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