Answers:
使用简单的文本文件的优点是,您不需要任何特定于数据库的工具来获取日志条目。
如果愿意,可以使用grep分析它们,可以用自己喜欢的寻呼机打开它们,并且可以使用自己喜欢的脚本语言(如Perl,Python等)来处理它们,而无需任何其他库。
在Unix系统上,您已经具有某种“系统日志API”。它称为syslog。Syslog并不是真正的API,但它是记录消息的标准。该名称代表网络协议及其背后的库和守护程序。
大多数系统的默认配置是监听本地消息的syslog守护程序。
守护程序接受消息并进行日志记录。各种平台的syslog守护程序都有几种不同的实现,还可以将消息记录到数据库中。
它是由你决定。
我只是想知道为什么在典型的Linux系统中会有这么多的日志文件?
不同的日志文件包含不同的信息(尽管通常会有一些重复)。它们通常具有不同的特征:不同的轮换和保留策略,不同的权限等。syslog守护程序负责编写它们。您可以在/etc/syslog.conf
或中查看其设置/etc/syslog-ng.conf
。
拥有一个用于记录日志的系统api功能不是更好的主意
这是一个好主意。我们称它为syslog。它的工作是将日志条目发送到syslog守护程序。
一个统一的表来保存所有应用程序的所有日志条目?
现在就是一堆蠕虫。您似乎假设存在一个数据库引擎,可能是一个关系数据库,可能是可以用SQL查询的数据库。但是Unix比SQL早,并且有很多理由说明为什么它没有采用SQL作为标准组件。在Unix下,数据库是文件系统。它不是关系数据库,而是一个简单的数据库。它的条目不是行,而是简单的文件,最好是文本,最好是简单的格式。例如,日志文件是文本文件,每行一个条目,其中包含日期,计算机名称,原始程序和条目文本。使用关系数据库将有很多缺点:
cat
,grep
,less
对SQL查询。而且,针对文件的权限,我不知道您如何在典型的关系数据库中处理此问题。如果您真的想将系统日志存储在关系数据库中(这可能有很多优点),请查看rsyslog(syslog的最新替代产品),它可以将系统日志写入MySQL,Postgres或Oracle数据库。
这将使诸如“ tail -f /var/log/apache/access.log”之类的事情变得不可能。
您为什么认为将所有内容放在一个文件中会更好?
grep '\[apache\]' | tail -f /dev/stdin
-但让每用户登录服务器(当用户无权访问其他用户的日志时)。
.log
,并.conf
作为标识符?