如何追踪类别?

时间:2010-02-08 17:30:20

标签: .net

.NET允许您将trace语句添加到代码中。你可以使用

Trace.WriteLine"(Some message"); 

然后定义跟踪侦听器以将这些消息收集到日志文件中。好了到目前为止。

但你也可以这样做:

Trace.WriteLine"(Some message", "Category");

如何在app.config(即<program>.exe.config)中设置过滤器,以便只将具有特定值“Category”的邮件发送给侦听器。文档暗示你可以做到这一点,但我没想到告诉你怎么做!我想定义自己的类别(通过子系统),并能够在需要时将跟踪路由到各种日志文件。

(是的,我知道所有关于log4net以及如何解决我的所有问题)。

3 个答案:

答案 0 :(得分:2)

您需要对TraceFilter的实现进行编码,以按类别字符串过滤跟踪。否则,您可以使用TraceEvent方法,然后使用EventTypeFilter根据TraceEventType过滤跟踪。

要修改过滤器,请使用EventTypeFilter示例中所述的app.config文件。

答案 1 :(得分:0)

继Jeff的回答并参考了TraceEvent之后,我成功地使用了TraceSource来设置相当精细的过滤。如果您编写自定义过滤器等,Trace只能执行您所要求的操作,但TraceSource可以提供您开箱即用的所需内容。 Mike's post让我清楚地了解了切换器,监听器和过滤器如何与TraceSource一起有效地过滤。

答案 2 :(得分:0)

这里只是澄清一件事。

这样的一行不起作用:

Trace.Listeners["listener2"].Filter = new CategoryFilter("FooFilter", new List<string>(), CategoryFilterMode.DenyAllExceptAllowed);

因为您无法将CategoryFilter分配给TraceFilter。键入不兼容性。这里的意图(在OP中)似乎试图实现这一点。 - 当你查看app.config时,看起来可能是可行的,但是在以编程方式编码时,类型不兼容性更加清晰。

使问题复杂化,也许MS Doc中的原始混淆点是LogSource可以有一个TraceListener,但TraceListener不能有一个CategoryFilter。这些类型只有一种方式,看起来Trace必须位于EntLib中其余日志框架的“used-by”关系的底部。