为什么大多数日志文件似乎都是纯文本形式,而不是存放在MySQL/其他类型的数据库中?
对我来说,将它们存放到数据库中会使分析变得容易得多...但这是否会以速度或其他方面为代价呢?
(我并不太关心可移植性,并且显然你需要在数据库连接时使用文本日志。)
话虽如此,如果应用程序的性质适合于将日志记录到数据库中,则没有任何问题,我见过许多这样的应用程序。
-------- 2010年8月编辑 ------------
截至SQLite版本3.7.0,SQLite的开发人员已经实现了预写式日志记录。这使得写入速度更快。请查看此视频以获取更多详细信息。有了更快的写入速度,SQLite作为日志数据库变得更加有用。
数据库在内存、存储空间和效率方面都存在重大开销。向数据库添加新记录或修改现有记录的速度要慢得多。(此外,许多人对SQL和/或设置数据库的具体细节不熟悉。)
然而,如果您需要分析或指标评估能力,这些能力很难通过简单的文本文件获得,那么这当然没有问题。这非常取决于具体情况。
(其他人已经指出了文件日志记录的许多优点。)
我认为当日志在远程机器上收集时(例如通过Linux上的syslog/rsyslog),DB日志记录变得更加有用,用于备份:如果原始机器受到攻击并且其日志被篡改,则这可以很有用。在这种情况下,在数据库中收集日志(也许特别是在远程机器上)非常有用,因为它可以帮助整理这些日志。您还可以使用phpLogCon等工具方便地浏览日志,或者使用自定义网页浏览它们(如果您只是进行一些临时监视,则通常比登录机器更容易)。
话虽如此,远程日志记录、将日志记录到数据库以及拥有一个漂亮的工具来浏览日志是相对独立的(我认为phpLogCon也可以处理文件日志)。如果我将日志存储在数据库中,我也会同时将日志存储在文件中,以便在与数据库的连接断开时能够阅读。
需要注意的是,你完全可以将日志写入文件(正如其他人指出的那样,这非常快速、高效和稳健),然后将数据转移到数据库中(可能在其他机器上),以便执行分析并利用典型的数据库功能加快速度。当然,这是可能的,因为通常不需要立即处理日志数据,所以推迟数据库的所有开销和脆弱性直到需要时才有意义。