我目前正在调查.net项目的各种日志记录可能性,我无法在System.Diagnostics.Debug / Trace功能和第三方库(如log4net,MS Enterprise Library,NLog等)之间做出决定。
目前我已经发现了这个:
如果有人能指出我正确的方向或纠正(或添加一些东西)给我上面给出的比较,我将非常感激!也许如果你鼓励我使用第三方,你可以建议一些特定的一方(考虑到我们的应用程序很可能不需要任何花哨的东西,如UDP,滚动文件等 - 只是普通文件,电子邮件,数据库和事件簿)?
提前致谢!
答案 0 :(得分:23)
答案 1 :(得分:0)
我知道这是旧的,但如果你保持简单,System.Diagnostics.Trace很容易配置。我多年来一直在使用简单的文本编写器配置块,直接复制出MSDN文档。
没有人经常提及这一点,但在您的代码中,您可以使用内置的 Trace.TraceInformation,Trace.TraceWarning和Trace.TraceError 来轻松隔离3级跟踪输出和然后在配置文件中选择要输出的级别(参见下面的配置)。如果在配置的“EventTypeFilter”中选择“信息”,则会在输出中获得全部3。如果选择“错误”,则只会在输出中收到TraceError消息。大多数时候,我只是将我的错误留给我,所以如果我的应用程序确实发生了某些事情,我的跟踪文件中已经有了这个输出。在我的Catch块中,我将添加TraceError代码以输出有用的信息。 TraceInformation适用于输出您已经通过的代码中的时间或点等内容,并沿途转储变量值。 TraceWarning适用于可处理但不可取的事情 - 比如Web服务可能需要很长时间才能完成,或者返回的数据记录数量超过可能导致未来问题的阈值。
有一个小缺点,因为所有这些跟踪代码行仍然执行,无论编译级别如何。如果将它们设置为不输出,则应该减少开销。但是,如果您正在编写高性能代码,则可能需要将这些行包装在条件编译标记中。
<system.diagnostics>
<sharedListeners>
<add name="MyTraceListener" traceOutputOptions="DateTime" type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="MyApplicationName_Trace.log">
<!--
Off - Does not allow any events through.
Error - Allows Error events through.
Warning - Allows Error, and Warning events through.
Information - Allows Error, Warning, and Information events through.
-->
<filter type="System.Diagnostics.EventTypeFilter" initializeData="Error" />
</add>
</sharedListeners>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="MyTraceListener" />
</listeners>
</trace>
</system.diagnostics>
答案 2 :(得分:-1)
从开发人员的角度来看,类似于orm的关注问题不应该是手写的。有很多优秀的第三方图书馆。当然,有时需要进行一些配置工作,但将其与手动滚动你自己的解决方案相比,它只是水中的一滴水。
我个人的偏好是log4net,但这取决于您的需求。我最好的建议是查看log4net或EntLib Logging Application Block等解决方案的文档,并做出最适合您的决定。
答案 3 :(得分:-1)
记录和跟踪是不同的问题。记录与操作反馈有关。跟踪(包括Debug方法提供的跟踪)与开发和测试有关。不应将跟踪代码编译到发布程序集中。 Trace和Debug类通过编译器注释(ConditionalAttribute)实现此目的。应优化此类代码以收集大量数据,而不是性能。另一方面,操作日志记录需要根据系统管理员/运营团队的要求针对性能和更广泛的存储机制进行优化。
因此,我建议使用Trace / Debug进行开发,以及使用更强大的日志记录包进行操作。