c# - 记录到文件或事件查看器?

标签 c# .net logging thread-safety enterprise-library

我想知道记录信息消息的“正确”方式是什么;到文件,还是到事件查看器中的特殊日志?

我喜欢记录文件,因为我可以使用滚动平面文件监听器并查看每天的新日志,而且在事件查看器中我一次只能看到一条消息 - 在文件中我可以扫描一整天很容易。我的同事认为文件只会占用空间,他喜欢将警告、错误和信息消息全部放在一个地方。你怎么认为?有首选方法吗?如果是,为什么?

此外,这些方法中是否存在任何并发问题?我读过 entlib 是线程安全的,如果监听器不是线程安全的,则会在后面生成 Monitor.Enter,但我想确定(我们只是使用 Logger.Write)。我们正在使用 entlib 3.1。

提前谢谢你。

最佳答案

这是我在记录消息时使用的经验法则。

EventLog(如果您当然有权访问) - 我们总是记录未处理的异常 - 在大多数情况下,我们记录错误或 fatal error - 在某些情况下,我们会记录警告 - 在极少数情况下,我们会记录信息 - 我们永远不会记录无用的一般消息,例如:“我在这里,废话,废话,废话”

日志文件 - 一般规则,我们记录所有内容,但可以选择级别类型或过滤器来降低记录的消息量

EventLog 始终是一个不错的选择,因为它绑定(bind)到 WMI。这样,Open View 等产品就可以在出现问题时监控并提醒操作人员。但是,请将消息保持在最低限度,因为它很慢,它的大小在每个 messaeg 的基础上受到限制,而且它是条目限制,因为您可以很容易地很快填满 EventLog,并且您的应用程序必须处理可怕的“EventLog 已满”异常: )

希望这有助于...

关于c# - 记录到文件或事件查看器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3596777/

相关文章:

c# - 如何让 JavaScriptSerializer 将子对象视为普通的旧字符串?

.net - 在不使用大量内存的情况下显示大文件的最佳方法是什么?

google-app-engine - GAE/J 请求日志格式分解

docker - 自动将日志从Docker容器保存到文件

c# - 在 C# 中测试私有(private)静态泛型方法

c# - 将数组发送到 API 并获取空列表

c# - 使用 LINQ 分页而不排序

c# - 在 ASP.NET 中从代码隐藏提交 POST 请求

c# - 子类中的父元素

java - 简单java项目的日志记录