是否可以使用System.Diagnostics.Trace作为.net的公共日志记录形式?

时间:2011-05-22 21:57:58

标签: .net logging

我想知道是否有任何方法可以利用System.Diagnostics.Trace上的方法,作为我的.Net库的公共日志记录形式。而不是在log4net或CommonsNet的这些库中包含依赖项(这似乎是一个类似的项目,用于在.Net中记录java的公共空间),我可以使用内置方法吗?

我看到可以向此跟踪输出添加侦听器,但是从性能关键代码调用Trace.TraceErrorTrace.TraceWarningTrace.TraceInformation会不会有性能损失?< / p>

2 个答案:

答案 0 :(得分:1)

它们已经为此目的而设计,因此将它们用于它们的目的是完全有效的。只需将其添加到您的app.config文件中:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

另一方面,是的,它们会影响应用程序在性能敏感区域的性能。如果您对此如此关注,请使用下面的Common.Logging

log.Trace(m=>m("value= {0}", obj.Value));

这样,只有启用了LogLevel.Trace,才会评估此功能。禁用时,性能损失最小。

答案 1 :(得分:0)

你的两个问题的答案都是'是'。首先,您需要实现(或使用现有的)TraceListener

对于第二种情况,将会有性能损失,因为惩罚是否有意义实际上取决于记录器的性能和性能。