我应该在我的网络应用程序中记录哪些信息?

时间:2009-06-09 03:14:20

标签: asp.net-mvc logging instrumentation

我完成了一个Web应用程序,我正在尝试实现一些日志记录。我从来没有见过任何记录什么的好例子。这只是例外吗?还有其他我应该记录的东西吗?您发现哪种类型的信息对查找和修复错误很有用。

寻找一些具体的指导和最佳实践。

由于

跟进

如果我正在记录异常,我应该记录哪些信息?我应该做的不仅仅是_log.Error(ex.Message, ex);吗?

7 个答案:

答案 0 :(得分:7)

以下是我可以记录的内容和应用程序的逻辑细分,您可能想要的原因以及如何执行此操作。无论我建议在实现时使用log4net等日志框架。

异常记录

当其他一切都失败时,这不应该。拥有捕获所有无法处理的异常的中心方法是一个好主意。这不应该 除非你使用的不仅仅是线程,否则要将整个应用程序包装在一个巨大的try / catch中要困难得多。这项工作并未就此结束 但是因为如果你等到异常到达你,很多有用的信息都会超出范围。你至少应该这样做 尝试收集应用程序状态的特定部分,这些部分可能有助于在堆栈展开时进行调试。您的应用程序应始终准备好生成此类型的日志输出,尤其是在生产中。如果您还没有,请务必查看ELMAH。我没试过,但我有heard great things

应用程序记录

我称之为应用程序日志的任何日志都包含捕获有关您的应用程序在概念级别上执行的操作的信息,例如“已删除订单”或“用户已登录”。这种信息可用于分析趋势,审核系统,锁定系统,测试,安全和检测粗略的错误。计划将这些日志留在生产中也许是一个好主意,可能是在不同的粒度级别。

跟踪记录

对我来说,跟踪日志记录代表了最精细的日志记录形式。在这个级别,您更少关注应用程序正在做什么,而更多关注它是如何做的。这是实际逐行遍历代码的一步。它可能最有助于处理并发问题或任何难以重现的问题。你不希望总是让它运行,可能只在需要时打开它。

最后,与通常只在最后解决的许多其他事情一样,考虑日志记录的最佳时间是在项目的开始,以便应用程序可以在设计时考虑到它。但是很好的问题!

答案 1 :(得分:3)

也许您应该记录尚未在您的应用程序中定义但客户端请求的页面/资源访问。这样,您就可以找到漏洞。

答案 2 :(得分:3)

要记录的一些事情:

  • 业务操作,例如添加/删除项目。与您应用的业主交谈,提出一系列有用的信息。这些应该对业务有意义,而不是对您有意义(例如:用户提交报告时,用户创建新流程时等)
  • 例外
  • 例外
  • 例外

要记录的一些事情:

  • 不要仅仅为了跟踪用户使用情况而记录信息。使用分析工具(在javascirpt中跟踪客户端,而不是在客户端中)
  • 不跟踪密码或密码哈希(巨大的安全问题)

答案 3 :(得分:2)

这取决于应用程序及其受众。如果您正在管理销售或交易股票,您可能应该记录比个人博客更多的信息。当您需要日志时,大部分时间是在生产环境中发生错误,但无法在本地重现。在这种情况下,具有日志级别和日志层次结构会有所帮助,因为您可以动态地提高日志级别。请参阅log4j's documentationlog4net

答案 4 :(得分:2)

在这个阶段你可能不应该考虑这个问题,相反,日志记录有助于在开发的每个阶段考虑,以帮助在潜在的错误出现之前将其扩散。根据您的程序,我会尝试捕获尽可能多的信息。记录一切。如果您没有充分引用该数据,则可以始终停止记录某些组件或进程。没有太多的信息。

根据我的(有限)经验,如果您不想为每种可能的错误类型创建特定的错误表,请构建一个通用数据库表,该表接受一般信息以及可以使用异常数据填充的字符串,成功但重要的过程中的确认消息等。我已经使用了带有参数的通用函数。

您还应该考虑在必要时关闭注销的能力。

希望这有帮助。

答案 5 :(得分:2)

我的几分钱。 除了正确使用日志严重性和异常外,还应考虑构建日志语句,以便日后可以轻松查看日志数据。例如 - 快速提取有意义的信息,进行查询等。生成日志数据的海洋没有问题,问题是将这些数据转换为信息。因此,事先对其进行结构化和定义有助于以后的使用。如果您使用log4j,我还建议使用映射诊断上下文(MDC) - 这对跟踪会话上下文有很大帮助。除了跟踪和信息,我还会使用调试级别,我通常会保持临时性。项目。这些可以在不需要时被过滤掉或禁用。

答案 6 :(得分:1)

我相信当您记录异常时,您还应该保存当前日期和时间,请求的网址,网址引荐来源和用户IP地址。