Windows应用程序中的日志记录(跟踪)准则

时间:2010-03-04 06:16:14

标签: windows logging tracing

我认为有两种不同类型的日志记录:

  • 以用户为中心的日志,例如我的防病毒软件(“已启动扫描”,“未发现威胁”等)生成的日志。
  • 以开发人员为中心的跟踪,可能像异常日志一样简单,也可以像每个方法调用的日志一样详细

我目前正计划如何将第二种类型的日志记录合并到我们的应用程序中,以便我们能够记录用户报告问题时出现的问题。我已经看过几个关于这些痕迹应该如何详细和可用框架的讨论,但在这里我正在寻找一些更一般的指导原则。

我遇到的具体问题包括:

  • 我们应该记录到文件,Windows事件日志还是其他地方?对于这些可能对用户不感兴趣的以开发人员为中心的日志,我觉得文件最合适。但在那种情况下:

    • 文件应该放在哪里?
    • 我们是否应该实施某种形式的日志轮换以防止文件过大?
    • 我们如何处理同时访问日志的多个应用程序实例?

  • 默认情况下是否应启用此跟踪?如果是的话,我有点担心表现;但如果不是,我们是否会以“开启跟踪并尝试重现问题”来回应许多用户的问题?这听起来不太有用。

我希望你能帮我解决这些问题。我也很感谢你对这个话题的任何其他建议。

6 个答案:

答案 0 :(得分:7)

如果平台可用,您应该使用已建立的日志记录框架。对于log4j(java),log4net(.net)等。大多数已建立的框架将以非常精确的方式提供增加和减少日志记录(从而影响性能)的方法。你必须复制所有这些。

如果没有,ETW (event tracing for windows)是一个内置于窗口中的高性能日志系统。我建议在每种情况下都没有使用日志记录框架。

哦,在问题出现之前不要担心性能(这并不意味着不要考虑它,只是不要微观优化直到你需要)。

答案 1 :(得分:3)

我同意Windows事件日志是开发人员日志的不适当位置。虽然它们是一个方便的日志记录位置,但导出日志信息有些问题,最终我觉得事件日志应该只用于记录系统管理员关注的信息。

至于应该存储此文件的位置,只要位置知道Windows 7和Vista正朝着进一步隔离用户的方向发展,这意味着写入Program Files文件夹将需要管理权限。使用此方法并且不要求以管理员身份运行应用程序。除此之外,我没有任何建议。

我不确定你正在使用什么样的应用程序,但我发现过多的随机跟踪信息是无用的。我将花费大部分精力来识别仅使用非常有限的信息集的大部分代码。如果操作正确,这将允许您使用一个跟踪语句重现大多数运行时错误。这也有效地使日志大小无关紧要。

除非应用程序的多个实例彼此接口,否则它们应该保留单独的日志文件。没有理由将两个完全独立的进程的日志信息组合在一起。

默认情况下应关闭完全成熟的跟踪。如果客户报告您无法重现的错误,则应建议他们打开跟踪信息,以便您进一步确定问题所在。

答案 2 :(得分:2)

The Art of Logging有一些有用的指导原则。

对于日志记录,我使用Simple Logging Façade作为所使用的真实日志框架的抽象。

更多信息:

答案 3 :(得分:0)

我发现log4net非常有效。我通常使用log4j XML格式的滚动文件appender,可以通过Chainsaw和另一个直接记录到调试控制台的appender来读取和显示。

可以在XML文件中轻松设置日志级别。对于分发,我将日志记录级别转换为Info或完全关闭。如果出现问题,可以将其转回调试。

我发现它很强大,因为它记录了调用日志条目的线程和函数。

答案 4 :(得分:0)

您可能希望使用Enterprise Library Logging Application Block。这是一个简单的可配置记录器,具有许多易于使用的功能。以上两个链接将使您立即运作。

答案 5 :(得分:0)

我建议使用现有的库,例如log4net或Ent lib Logging应用程序块。

就个人而言,Logging应用程序块过于苛刻,并且为了我的目的而复杂化。

默认情况下应记录任何异常,您应该可以选择为奇怪的问题启用详细的跟踪/日志记录模式,这些问题无法通过标准异常日志记录收集足够的信息。

您永远不知道用户使用代码时会发生什么。您需要查找和解决问题的信息越多越好。