.NET允许您将trace语句添加到代码中。你可以使用
Trace.WriteLine"(Some message");
然后定义跟踪侦听器以将这些消息收集到日志文件中。好了到目前为止。
但你也可以这样做:
Trace.WriteLine"(Some message", "Category");
如何在app.config
(即<program>.exe.config
)中设置过滤器,以便只将具有特定值“Category”的邮件发送给侦听器。文档暗示你可以做到这一点,但我没想到告诉你怎么做!我想定义自己的类别(通过子系统),并能够在需要时将跟踪路由到各种日志文件。
(是的,我知道所有关于log4net以及如何解决我的所有问题)。
答案 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”关系的底部。