数据库或文件中的应用程序日志


Application logs in database or file

我想为我的应用程序制作一个详细的记录器,因为它可能会变得非常复杂并且必须保存很多不同的东西,我想知道在哪里最好将其保存在数据库中(以及数据库是否更适合这种操作)或文件(如果文件哪种格式:text,csv,json,xml)。我的第一个想法当然是文件,因为在数据库中我看到很多问题,但我也希望能够显示这些日志,并且使用数据库更容易。

我正在为 HIPPA 合规性构建一个日志,这是我的粗略实现(尚未完成)。

文件 VS..DB
我使用数据库表来存储最近 3 个月的数据。每天晚上,cron 都会运行并将旧数据(过去 3 个月的数据)推送到压缩文件中。我还没有写这个脚本,但应该不难。这样就可以搜索、过滤最近 3 个月等。但数据库不会被日志条目淹没。

数据库首选项
我正在使用MSSQL,因为我别无选择。我通常更喜欢MySQL,因为它有更好的寻呼机优化。如果您所做的搜索和过滤量非常少,或者您担心性能,您可能需要考虑 apache solr 中间人。我不是数据库专家,所以我不能给你

更多。

表结构
我的表格是 5 列。日期、操作(创建、更新、删除)、对象(患者、预约、医生)、ObjectID 和 Diff(前后值的序列化数组,为了节省空间,更改的值只有空值或未更改的值)。

总结
要考虑的最重要的部分是:您是否需要人们能够定期访问和过滤/搜索数据?如果是,请考虑最近历史记录或最重要数据的数据库。如果没有文件可能是更好的选择。

我的混合解决方案也值得考虑。我将把文件推送到 amz 文件服务器,这样它就不会占用我的 Web 服务器空间。

您可以使用一些现有的库(如log4php)创建详细信息和复杂记录器,因为这已作为性能的一部分进行了全面测试,与您为自己设计自定义相比,它还将节省开发时间,我个人使用了一些来自php和dotnet的库来满足我们在一些金融和医疗领域项目中的复杂记录器需求

在这里,我建议如果您需要从 PHP 中执行操作,请使用这个

https://logging.apache.org/log4php/

我认为正确的答案实际上是:两者都不是。文件或数据库都无法为您提供正确的搜索和过滤,并且在查看日志时需要它。 我整天都在处理日志(请参阅 http://sematext.com/logsene 以了解原因),我将按如下方式解决此问题:

  1. 记录到文件
  2. 使用轻量级日志托运器(例如 Logagent 或 Filebeat)
  3. 索引日志到你自己的Elasticsearch集群(如果你
  4. 不介意管理和学习)或云日志管理服务之一(如果你不想处理Elasticsearch管理,扩展等 - Logsene,Loggly,Logentries......)