如何跨类使用TraceSource
我最近正在研究TraceSource的文档。 Microsift说,TraceSource是一种新的方式,应该用来代替旧的Trace类。
// create single TraceSource instance to be used for logging
static TraceSource ts = new TraceSource("TraceTest");
// somewhere in the code
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
现在我的问题。 您有大型项目,并且有很多类的组件。 假设你想追踪跨班级传播的特定功能。 明显的想法是你需要创建一个特定的TraceSource。
1)要使用Tracesource,我需要先创建实例。 MS想通过各种类或程序集共享这个实例是什么? 我应该创建一个具有静态单例属性的虚拟类吗? 在这种情况下你在做什么。
2)为什么我需要TraceSource实例? 每个propery在配置文件中都有描述。 基于Trace类的旧逻辑不需要一些实例,只提供了使用静态方法的方式。
* 1。 只需在每个你想使用它的类中定义TraceSource。 您可以将TraceSource设置为静态,以便在定义它的类的所有实例之间共享。无需在需要“相同”TraceSource的所有类(类型)之间共享实例。 每次你删除一个新的TraceSource(TraceSource ts = new TraceSource(“somename”);实例时,你会得到一个新的TraceSource对象,但它引用了相同的配置信息。你使用相同的名称,你会得到不同的TraceSource实例,但它们都将被配置为相同的。总之,不需要尝试在类之间共享TraceSource实例,也不需要创建一个带有静态单例子的虚拟类,参见下面的示例我还从这里包含了更多的SO链接,它们描述了如何使用TraceSources。
//
// In this example, tracing in classes A and B is controlled by the "TraceTest" TraceSource
// in the app.config file. Tracing in class C is controlled by the "TraceTestTwo"
// TraceSource in the app.config.
//
// In addition to using different TraceSource names, you can also use SourceSwitches
// (in the app.config). See some examples of app.config in the
// "turning-tracing-off-via-app-config" link below.
//
public class A
{
private static readonly TraceSource ts = new TraceSource("TraceTest");
public void DoSomething()
{
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
}
}
public class B
{
//
//Use the same config info for TraceTest in this class
//It's ok to use a different instance of TraceSource, but with the same name,
//in this class, the new instance will be configured based on the params in the
//app.config file.
//
private static readonly TraceSource ts = new TraceSource("TraceTest");
public void DoSomething()
{
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
}
}
public class C
{
//
//Use a different TraceSource in this class.
//
private static readonly TraceSource ts = new TraceSource("TraceTestTwo");
public void DoSomething()
{
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
}
}
* 2。 使用多个TraceSources的一个好处是您可以更精确地控制跟踪。 您可以通过“TraceTest”在一个级别(或根本不)和通过“TraceTestTwo”在不同级别(或者,再次,根本不)。 您可以将每个TraceSource发送到它自己的TraceListener,或者将所有TraceSource发送到相同的TraceListener或混合匹配。 将定制各个TraceSources的配置的能力与仅使用Trace类上的静态方法的限制进行比较。 您可以配置“跟踪”信息(TraceListener(s))的位置或“跟踪”信息的级别,但不能像使用TraceSources时那样控制每个类或每个功能区的级别。 最后,多个TraceSources的另一个好处是您可以在输出中获得“自由”上下文信息。 默认情况下(或者可选地,我不记得),TraceListener将记录记录消息的TraceSource的名称。 因此,您可以在输出中查看该行,并了解它所来自的类或功能区域,而无需在呼叫站点中记录上下文信息。 在上面的代码示例中,来自类A和B的跟踪输出将标记为“TraceTest”,而来自类B的跟踪输出将标记为“TraceTestTwo”。
请原谅下面的链接轰炸,但我已经发布了一些关于TraceSource和System.Diagnostics的相当不错的信息(如果我自己说的话)。
如果您要使用TraceSource,请考虑使用本SO帖子中提到的库来格式化输出,如log4net / NLog:
.Net TraceSource / TraceListener框架是否与log4net的格式化程序类似?
有关使用TraceSource的更多信息,以及关于如何改进“TraceSource体验”的一些想法,请参阅本文中的答案。
有关TraceSource的更多信息:将Trace方法添加到System.Diagnostics.TraceListener
有关TraceSource的更多信息:System.Diagnostics.Debug命名空间vs其他日志记录解决方案(log4net,MS Enterprise Library等)
有关TraceSource的更多信息:通过app.config关闭跟踪
链接地址: http://www.djcxy.com/p/52385.html