我的网页应用程序应记录哪些信息?

20

我正在完成一个Web应用程序,尝试实现一些日志记录功能。我从未见过任何有关日志记录的好例子。仅记录异常吗?还有其他需要记录的东西吗?哪种类型的信息对于查找和修复错误非常有用。

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

谢谢

跟进

如果我要记录异常,具体应该记录哪些信息? 我是否应该做更多操作而不仅仅是_log.Error(ex.Message, ex);

7个回答

16
这是我对应用程序中可以记录的内容、为什么要记录以及如何记录的逻辑分析。无论如何,我建议在实现时使用类似log4net的日志框架。

异常日志

当所有其他方法都失败时,这个不应该失败。最好有一种集中捕获所有未处理异常的方法。除非您正在使用多个线程,否则这不应该比将整个应用程序包装在一个巨大的try/catch中更难。但工作并没有结束,因为如果等到异常到达您的手中,许多有用的信息就会失去作用。至少,您应该尝试收集可能有助于调试的特定应用程序状态片段,而堆栈展开。您的应用程序应始终准备产生此类型的日志输出,特别是在生产环境中。如果您还没有,请务必查看ELMAH。我没有尝试过,但我已经听说很棒了。

应用程序日志

我所说的应用程序日志包括任何捕获有关应用程序在概念层面上正在执行的操作的信息,例如“删除订单”或“用户登录”。这种信息在分析趋势、审核系统、锁定系统、测试、安全性和检测错误方面非常有用。在生产环境中保留这些日志记录可能是个好主意,也许可以以不同的粒度级别记录。

跟踪日志

对我来说,跟踪日志代表了最细粒度的日志记录形式。在这个级别上,您关注的不是应用程序正在做什么,而是它如何执行。这比逐行浏览代码要高一步。它可能在处理并发问题或任何难以复制的问题时最有帮助。您不希望始终运行此操作,可能只需要在需要时打开它。

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


记录“用户xyz已登录”而不是“某个用户已登录”会更有帮助,不是吗?(非常好的答案,谢谢)。 - aderchox

8

需要记录的一些内容:

  • 业务操作,例如添加/删除项目。与您的应用程序业务所有者交谈以确定有用的事项清单。这些应该对业务有意义,而不是对您有意义(例如:当用户提交报告、创建新流程等)
  • 异常情况
  • 异常情况
  • 异常情况

不需要记录的内容:

  • 不要仅为跟踪用户使用而记录信息。使用分析工具进行跟踪(它在JavaScript中跟踪客户端,而不是在客户端中)
  • 不要跟踪密码或密码哈希(安全问题)

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

4

这取决于应用程序及其受众。如果您管理销售或交易股票,可能需要记录比个人博客更多的信息。当您的生产环境中发生错误但无法在本地重现时,最需要日志记录。具有日志级别和日志层次结构将有助于此类情况,因为您可以动态增加日志级别。请参阅log4j文档log4net


4

我有几点建议。 除了正确使用日志严重性和异常,考虑构造你的日志语句,以便将来能够轻松查看日志数据。例如 - 快速提取有意义的信息,进行查询等。生成大量的日志数据并不是问题,问题在于将这些数据转换为信息。因此,事先结构化和定义它有助于后续使用。如果你使用log4j,我还建议使用映射诊断上下文(MDC) - 这对于跟踪会话上下文非常有帮助。除了trace和info之外,我还会使用debug级别,通常用于保留临时项目。这些可以在不需要时被过滤或禁用。


3
您可能不应该在这个阶段考虑这个问题,而是要在开发的每个阶段考虑日志记录,以帮助在错误出现之前解决潜在的bug。根据您的程序,我建议尽可能捕获更多信息。记录一切。如果您不经常引用某些数据,可以随时停止记录某些组件或进程。没有太多信息这种事情。
从我的(有限)经验来看,如果您不想为每种可能的错误类型制作特定的错误表,请构建一个通用的数据库表,接受一般信息以及一个字符串,您可以将其填充异常数据、成功但重要进程中的确认消息等。我使用了一个带参数的通用函数来实现这一点。
您还应该考虑必要时关闭日志记录的能力。
希望这有所帮助。

3

我认为当记录异常时,应该同时保存当前日期和时间、请求的URL、URL引用者和用户IP地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接