这个反应迟了,但是......
我认为您应该考虑使用 TraceSources 而不是 Debug.WriteLine 和/或 Trace.WriteLine。使用 TraceSources,您可以对日志进行更高级别的控制。每个 TraceSource 的级别可以像 TraceSource (TraceListener) 的目的地一样进行控制。您可以编写如下代码:
public class RectToSqlServer : IDatabaseUtilities
{
private static readonly TraceSource ts = new TraceSource("RectToSqlServer");
public void AddRectToDatabase(object record)
{
ts.TraceEvent(TraceEventType.Information, "record = {0}", record.ToString());
//Add record to database ...
}
}
public class RectToOracle : IDatabaseUtilities
{
private static readonly TraceSource ts = new TraceSource("RectToOracleServer");
public void AddRectToDatabase(object record)
{
ts.TraceEvent(TraceEventType.Information, "record = {0}", record.ToString());
//Add record to database ...
}
}
现在,您可以独立控制每个类的日志记录(级别、目的地等)。另外,请注意,您不必同时添加 Trace.WriteLine 和 Debug.WriteLine 来获取调试和发布版本的日志记录。使用 TraceSources 将使您在将来使用 ETW 时处于有利位置,因为从 .NET(可能是 3.5,肯定是 4.0)开始有一个可用的 ETWTraceListener。但是这种特殊的 ETW 功能仅在 Vista 和更高版本的操作系统上可用。
要向 System.Diagnostics 添加功能(主要 - 可能仅 - 如果通过 TraceSource 进行日志记录),请查看Ukadc.Diagnostics。Ukadc.Diagnostics 为 System.Diagnostics 添加了非常酷的格式化功能(类似于您可以使用 log4net 和 NLog 执行的操作)。没有代码依赖(只需安装 Ukadc.Diagnostics 并将一些配置添加到您的 app.config)。我不得不说我觉得它真的很酷。
如果您想花点时间来包装对 TraceSources 的访问,请参阅此处了解 TraceSource 包装器的有趣实现,它本质上使 TraceSources 能够从“祖先”TraceSources 中“继承”日志记录配置(例如 log4net 和 NLog 记录器可以继承日志记录设置)。