使用数据库进行日志记录

Aar*_*ken 9 mysql database logging

有没有理由认为大多数日志都是纯文本,而不是放在MySQL /其他类型的数据库中?

在我看来,将它们放入数据库会使分析变得更容易,更容易......但这会牺牲速度还是别的呢?

(我不关心可移植性,显然你有数据库连接的文本日志.)

Vot*_*ple 14

我可以想到两个重要原因:

首先,当简单地将信息附加到文件时,数据库比文本文件慢.使用数据库,您必须建立连接,通过网络传输数据,将其存储在索引结构中等等.使用文件,您只需将错误写入本地磁盘.

其次,有时您要记录的内容与数据库相关.如果本地磁盘坏了,那么比尝试生成日志文件有更大的问题.但即使其他一切正常,您也可以记录数据库中断.

话虽如此,有很多情况下我想记录的信息只有在应用程序运行正常时,以及我已经有数据库连接时才相关.在这些情况下,我会直接登录到MySQL.


T.R*_*Rob 5

尽管您不关心可移植性,但我相信这是一个很大的原因。文件 I/O 几乎是通用的,并且具有极其一致的 API。其他优点包括:

  • 移动部件较少
  • 没有什么可安装的
  • 技能门槛低
  • 速度
  • 一套成熟的日志记录、解析、管理工具
  • 不依赖于网络(假设本地磁盘而不是 NFS 或其他远程存储)
  • 可靠性
  • 仍然可以将它们放入数据库中进行报告/分析
  • grep 是你的朋友
  • 无需担心相当于 SQL 注入的文件(对于存储数据来说很好,但对于报告数据或后续数据库上传则不一定如此)。

也就是说,如果应用程序的性质适合的话,记录到数据库并没有什么问题,而且我见过很多这样做的应用程序。


Jay*_*dse 5

从历史上看,数据库非常昂贵,您肯定不想将宝贵的数据库许可证浪费在日志上。然而,如今的数据库相对便宜,处理也是如此。使用日志数据库可能不会让您陷入经济困境。

日志文件的优点是您可以一直写入到其末尾。与使用数据库服务器相比,这是一个相对有效的操作。

数据库的优点是您可以按照数据关系构建日志数据,然后可以使用 SQL 对其进行分析。这可以让您深入了解软件的操作。

通过使用 SQLite 作为日志数据库,您可以两全其美。SQLite 是一个带有 SQL 引擎的库,您可以将其链接到您的程序中。您可以使用 SQLite API 打开数据库、运行 SQL 和关闭数据库,而不是 fopen/fwrite/fclose。没有数据库服务器,因为 SQLite 引擎操作在应用程序的进程中运行...就像 fopen/fwrite/fclose 一样。一旦您在 SQLite 数据库中捕获数据(全部存储在一个简单的文件中),您就可以使用 SQL 来分析您的日志数据。查看http://www.squidoo.com/sqlitehammer#module5800826获取示例。

-------- 2010 年 8 月编辑 ------------

SQLite 的开发人员从SQLite 版本 3.7.0开始实现了预写日志记录。这使得写入速度更快。观看此视频了解更多详情。由于写入速度更快,SQLite 作为日志数据库更加有用。

  • @Liron Levi - 使用版本 3.7.0 并启用预写日志记录,您将能够实时查看日志文件,因为写入器不会阻止读取器。 (3认同)