【问题标题】:How to reduce redundant log messages for a web-app?如何减少 Web 应用程序的冗余日志消息?
【发布时间】:2010-11-07 16:26:54
【问题描述】:

有人对如何最小化 Web 应用程序的日志有任何建议吗?

现在,我正在记录每个错误。因此,如果存在每个请求都发生错误的情况(例如数据库连接问题),则可能会在每个请求上为每个用户记录它。正如您可以想象的那样,不需要太多用户做太多事情就可以开始积累一个带有冗余日志错误的巨大日志文件。

我想到创建某种类型的标记机制以在 N 分钟内不记录相同的错误。我不喜欢这个有两个原因; 1) 它可以隐藏最重要的问题,以及 2) 级联错误可能无法正确记录它们的错误轨迹,忽略以前记录的错误,可能会导致我最初的诊断失败。

我确定我不是第一个遇到此问题的人......有人对如何减少网络应用程序的冗余日志消息有任何建议吗?

【问题讨论】:

  • 你使用什么日志框架? log4net、ELMAH、企业、本土、其他?
  • @Dillie-O-Homegrown。但我愿意换。您是否建议使用日志框架为我处理这个问题?

标签: web-applications logging error-logging


【解决方案1】:

您可以创建一个记录到数据库的记录系统,并设置一个标志来确定是记录单个条目,还是只记录一个基本日志条目的计数器。通过统计,您可以看到错误总数,但没有爆炸性的日志文件。

【讨论】:

  • 谢谢,这是个好主意,但我更喜欢登录到文本文件。
【解决方案2】:

您可以尝试将最后一个条目与您将要放入日志的错误进行比较。如果这是相同的类型和来源,则在末尾附加一个字符串“(重复 n 次)”。

记录器每次看到这样一个字符串并且错误匹配时,它可以增加n直到另一种类型的错误出现。

【讨论】:

  • 谢谢。我想到了这一点,但我不想“阅读”日志。
  • 是的,做“只写”日志记录可能会更好,但我认为 linux 在 syslog-ng 中这样做。我在 /var/log 的几个地方看到“最后一条消息重复了 n 次”。
  • @macbirdie-嗯,你可以在你的应用程序中保持运行计数,然后重置它。但这仍然会在您的日志中添加一行..除非...我想您可以记录它,然后在内存中保持运行计数,然后在下一条日志消息之前添加“最后一条消息重复 n 次”.. .这可能有效! +1
【解决方案3】:

要回答您在评论中提出的问题,据我所知,没有包含此类功能的开箱即用解决方案。

要考虑的另一个想法(我意识到此时您已经接受了自己的答案)是为系统中的每个错误记录点分配一个 ID。记录错误时,您可以保留错误 ID 的简单哈希表以及记录错误的时间。然后在处理日志记录时,如果哈希中已经存在错误并且它已经在 5 分钟内(或您决定的任何时间),那么您可以简单地中止日志记录并更新时间戳。

我不确定让用户发送错误消息请求是否会解决您的问题,因为如果您的所有用户都提交消息,它将与错误日志相同,只有您的收件箱会被淹没为而不是简单地监控日志文件本身。

【讨论】:

  • “不确定让用户发送错误消息请求是否会解决您的问题”-我希望会发生的是用户将第一次发送它......然后停止发送它。就像我说的,我充满希望,但我们会看到...... ;-)
  • 嗯,您是否在错误屏幕上有一些措辞说“如果您已经发送过一次,请关闭它”或类似的意思?这可能有助于电子邮件条款。我知道这听起来很傻,但你永远不知道键盘的另一边到底是谁。 8^D
【解决方案4】:

我已将它与我的用户错误消息结合在一起,因此当错误消息显示给用户时,他们可以单击、确定或发送给支持。然后将完整的错误、调用堆栈和完整的请求信息输入到错误跟踪器中。

这还没有发布,所以我们还没有看到这是否是一个好主意......会及时通知你。

PS-我已经回答了我自己的问题作为记录,并选择了它,因为其他答案不符合我的需要。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2010-11-09
    相关资源
    最近更新 更多