.net 如何通过类别跟踪?

.net 如何通过类别跟踪?,.net,.net,.NET允许您向代码中添加跟踪语句。你可以用 Trace.WriteLine"(Some message"); 然后定义跟踪侦听器将这些消息收集到日志文件中。好的,到目前为止 但你也可以做到: Trace.WriteLine"(Some message", "Category"); 如何在app.config(即.exe.config)中设置筛选器,以便仅向侦听器发送具有特定“类别”值的消息。文档提示您可以这样做,但我认为没有告诉您如何做!我希望定义自己的类别(按子系统),并能够在需要时将

.NET允许您向代码中添加跟踪语句。你可以用

Trace.WriteLine"(Some message"); 
然后定义跟踪侦听器将这些消息收集到日志文件中。好的,到目前为止

但你也可以做到:

Trace.WriteLine"(Some message", "Category");
如何在
app.config
(即
.exe.config
)中设置筛选器,以便仅向侦听器发送具有特定“类别”值的消息。文档提示您可以这样做,但我认为没有告诉您如何做!我希望定义自己的类别(按子系统),并能够在需要时将跟踪路由到各种日志文件


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

您需要编写一个实现,以按类别字符串过滤跟踪。否则,您可以使用该方法,然后使用来基于


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

继Jeff关于TraceEvent的回答之后,我已经成功地使用TraceSource设置了相当精细的过滤。Trace只能在编写自定义过滤器等时执行您要求的操作,但TraceSource可以提供您所需的现成功能。让我清楚地了解了交换机、侦听器和过滤器如何与TraceSource一起有效地进行过滤

我只是想澄清一件事

像这样的一行行不通:

Trace.Listeners["listener2"].Filter = new CategoryFilter("FooFilter", new List<string>(), CategoryFilterMode.DenyAllExceptAllowed);
Trace.Listeners[“listener2”].Filter=newcategoryfilter(“FooFilter”,new List(),CategoryFilterMode.DenyAllExceptAllowed);
因为无法将CategoryFilter分配给TraceFilter。类型不兼容。这里(OP中)的意图似乎是试图实现这一点当您查看app.config时,这似乎是可行的,但当以编程方式进行编码时,类型不兼容性更为明显


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

如果你知道一个解决方案,为什么不使用它呢?你真的想重新发明轮子吗?这是一个有趣的练习,可以利用框架的内置机制,并且不需要运送额外的组件。TraceFilter是一个抽象类,因此会给出一个错误。SourceFilter已被接受,但我看不出如何将我的类别放入并使其工作。通过创建,我的意思是指定您自己的派生。我会相应地编辑。谢谢你。我现在已经编写了自己的过滤器类,实现了我想要的。然而,底层侦听器类的工作并不十分正确(Reflector在其实现中显示出不一致),因此我还必须编写一个自定义侦听器。我怀疑这方面的实施是不完整的,这也解释了微软缺乏清晰的文档的原因。