我们在上一份工作中使用了一个日志数据库,它很棒。
我们有存储过程,可以为我可以从网页加载的不同指标提供一般系统健康状况的概述。我们还可以在给定的时间段内快速为给定的应用程序吐出跟踪,如果我想要它很容易得到一个文本文件,如果你真的只是喜欢 grep-ing 文件。
为了确保日志系统本身不会成为问题,当然我们在不同的应用程序中使用了一个通用的代码框架来处理日志表的写入。该框架的一部分还包括记录到文件,以防问题出在数据库本身,其中一部分涉及循环日志。至于空间问题,日志数据库的备份计划不同,这真的不是问题。空间(未备份)很便宜。
我认为这解决了其他地方表达的大部分担忧。这都是执行的问题。但是,如果我在这里停下来,那仍然是“不会更糟”的情况,这是麻烦设置数据库日志记录的一个不好的理由。我喜欢它的地方在于它允许我们做一些对平面文件来说更难做的新事情。
文件有四个主要改进。首先是我已经提到的系统概述。第二个,也是最重要的,是检查是否有任何应用程序丢失了我们通常期望找到的消息。这种事情在传统的文件记录中几乎是不可能发现的,除非你每天花费大量时间查看那些在 99% 的情况下告诉你一切正常的应用程序的令人麻木的日志。令人惊奇的是如何释放视图以显示丢失的日志条目。大多数时候,我们根本不需要查看大多数日志文件……如果没有数据库,这将是危险和不负责任的。
这带来了第三个改进。我们生成了一封每日状态电子邮件,这是我们在一切正常运行的日子里唯一需要查看的内容。包含的电子邮件显示错误和警告。发送电子邮件的同一个数据库作业将丢失的日志重新记录为警告,并且丢失电子邮件是一件大事。我们可以在每日电子邮件中一键将特定日志消息转发到我们的错误跟踪器(它是 html 格式的,从网络应用程序中提取数据)。
最后的改进是,如果我们确实想更密切地关注特定应用程序,比如在进行更改后,我们可以订阅该特定应用程序的 RSS 提要,直到我们满意为止。从文本文件中更难做到这一点。
我现在所处的位置,我们更多地依赖第三方工具及其日志记录能力,这意味着要回到更多的人工审查。我真的很想念数据库,我正在考虑编写一个工具来读取这些日志并将它们重新记录到数据库中以恢复这些能力。
同样,我们使用文本文件作为后备来执行此操作,而真正使数据库有价值的是新功能。如果您要做的只是写入数据库并尝试以与旧文本文件相同的方式使用它,它会增加不必要的复杂性,您不妨只使用旧文本文件。为新功能构建系统的能力使其值得。