记录到文件或事件查看器?

时间:2010-08-29 22:00:41

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

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

我喜欢记录到文件,因为我可以使用滚动平面文件监听器并查看每天的新记录,而且在事件查看器中我一次只能看到一条消息 - 在一个文件中我可以扫描一天很容易我的同事争辩说,文件占用空间,他喜欢在一个地方发出警告,错误和信息消息。你怎么看?有首选方式吗?如果是这样,为什么?

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

提前谢谢。

6 个答案:

答案 0 :(得分:5)

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

EventLog (如果您有课程访问权限) - 我们总是记录未处理的例外 - 在大多数情况下,我们会记录错误或致命错误 - 在某些情况下,我们会记录警告 - 在极少数情况下,我们会记录信息 - 我们永远不会记录无用的一般信息,例如:“我在这里,等等,等等,等等”

日志文件 - 一般规则,我们记录everthing但可以选择用于调低记录消息量的级别或过滤器类型

EventLog始终是一个不错的选择,因为它绑定到WMI。这样,像Open View等产品一样,如果出现问题,可以监视和警告操作。但是,将消息保持在最低限度,因为它很慢,其大小限制在每个messaeg的基础上,它的入口限制,因为您可以很快地填充EventLog并且您的应用程序必须处理可怕的“EventLog is Full”异常: )

希望这会有所帮助......

答案 1 :(得分:3)

没有'正确'的方式。这取决于您的要求。

你喜欢'查看平面文件,但每天可以阅读多少(数千)行?

您似乎需要的是一个计划(政策),并且应该涉及一些工具。问问自己,你会多快注意到日志中的异常情况?没有正常的东西?

事件日志需要更多的工作/开销,但可以通过某种工具轻松地远程监控(多个服务器)。如果您使用(仅)手动检查,请不要打扰。

答案 2 :(得分:2)

在企业应用程序中,有不同类型的日志,例如 -

  1. 活动日志 - 检测流程并在调试中有用的技术日志
  2. 审核日志 - 用于审核目的的日志。在某些情况下,此类日志的可用性是法律要求。
  3. 在哪里存储: -

    1. 就审计日志或任何包含敏感信息的日志而言,他们应该前往可以安全存储的数据库。

    2. 对于活动日志,我的偏好是文件。但是我们还应该有不同的日志级别,例如Error,Info,Verbose等,它们应该是可配置的。这样可以在不需要时节省记录所需的空间和时间。

    3. 只有当您无法写入文件时,才应写入事件日志。

答案 3 :(得分:1)

请考虑向您的客户管理员或技术支持人员询问他们希望放置日志的位置。

至于线程安全,是的,EntLib是线程安全的。

答案 4 :(得分:0)

我建议使用事件查看器,但如果您没有管理员权限或对事件查看器的特定访问权限,则记录到普通文件将是更好的选择。

答案 5 :(得分:0)

我更喜欢登录数据库,这样我就可以分析我的日志并生成有关错误的统计数据和趋势,并修复最常见的错误。

对于外部客户,我使用名为async的Web服务来报告错误。 (我吞下它中的任何记录,所以任何记录错误都不会影响客户端 - 不是我有任何记录错误,使用log4net和L4NDash)。