我们最初没有使用任何日志记录或调试跟踪,但在花了几周时间来跟踪一些数据损坏后,我们决定将生产和Debug.Assert所需的Debug.Write和跟踪
因此,现在的问题是使用调试和跟踪日志记录的最佳实践是什么。我只是在找一些通用的东西。
public void AddRectodatabase(object record)
{
Debug.WriteLine(record.ToString());
Trace.WriteLine(record.ToString());
// Add it to databse
Debug.Assert(true, "Use this on case by case basis");
}
这对于一般用途来说足够好了吗,我做错了什么吗?
我们希望继续使用.net System.Diagnostics,而不是log4net等其他替代方案。
在System.Diagnostics中还有其他有用的东西吗?
发布于 2010-10-03 22:59:22
这个回应很晚,但是..。
我认为你应该考虑使用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的访问,请参阅here,了解一个有趣的TraceSource包装器实现,它实质上使TraceSources能够从“祖先”TraceSources“继承”日志记录配置(就像log4net和NLog记录器如何继承日志记录设置一样)。
发布于 2010-05-09 03:29:23
除了将第一个参数硬编码为true
的Assert
之外,您可以很好地使用它。您可能应该在那里添加一些条件,只有当条件为false时,才会打印消息(第二个参数)。因此,在您的代码示例中,它将永远不会显示。在某些情况下,如果您不想将调试语句包装在条件块中,WriteLineIf
可能会派上用场。
查看Debug class reference,它有很多有用的方法和属性来帮助您记录日志。
发布于 2010-05-26 07:59:30
System.Diagnostics也包含EventLog.WriteEntry,但您可能想要也可能不想用跟踪消息淹没EventLog,尽管这是记录主要应用程序事件的一种简单方法。
https://stackoverflow.com/questions/2795310
复制相似问题