为什么典型的 Linux 系统中有这么多日志文件?他们为什么不使用一个统一的日志数据库/文件和一个 API?

为什么典型的 Linux 系统中有这么多日志文件?他们为什么不使用一个统一的日志数据库/文件和一个 API?

我只是想知道为什么典型的 Linux 系统中有这么多日志文件?使用一个用于日志记录的系统 API 函数和一个用于保存所有应用程序的所有日志条目的综合表不是一个更好的主意吗?

答案1

它是的一部分Unix哲学。这个想法是文本文件不受程序锁定,每个人都可以使用他们喜欢的任何技术。更进一步来说,通常使用平面文件,而不是 XML 等标记语言(尽管我也见过以 XML 格式存储内容的程序)。

在谷歌搜索中我发现了这个写得不错关于纯文本,以及关于 Unix 哲学的评论。

答案2

使用简单文本文件的优点是您不需要任何特定于数据库的工具来获取日志条目。

如果您愿意,您可以使用 grep 分析它们,您可以使用您最喜欢的分页器打开它们,并且可以使用您最喜欢的脚本语言(如 Perl、Python 等)处理它们,而不需要任何额外的库。

在 Unix 系统上,您已经拥有某种“系统日志 API”。它称为系统日志。 Syslog 并不是真正的 API,而是记录消息的标准。该名称代表网络协议及其背后的库和守护程序。

大多数系统的默认配置是监听本地消息的系统日志守护进程。

守护进程接受消息并进行日志记录。对于所有类型的平台,系统日志守护进程都有多种不同的实现,并且还可以将消息记录到数据库中。

它是由你决定。

答案3

我只是想知道为什么典型的 Linux 系统中有这么多日志文件?

不同的日志文件包含不同的信息(尽管通常存在一些重复)。它们通常具有不同的特征:不同的轮换和保留策略、不同的权限等。syslog 守护进程负责写入它们;你可以看到它的设置/etc/syslog.conf或者/etc/syslog-ng.conf

使用一个系统 api 函数来记录日志不是一个更好的主意吗

这是个好主意。我们就这样称呼它吧系统日志。它的工作是将日志条目发送到系统日志守护程序。

以及一张综合表来保存所有应用程序的所有日志条目?

现在那是一整罐蠕虫。您似乎假设存在一个数据库引擎,可能是一个关系数据库,也可能是一个可以在 SQL 中查询的数据库。但 Unix 比 SQL 更古老,因此它没有采用 SQL 作为标准组件是有充分理由的。在Unix下,数据库就是文件系统。它不是关系数据库,而是简单的一。它的条目不是行,而是简单的文件,最好是文本,最好具有简单的格式。例如,日志文件是文本文件,每行一个条目,包含日期、机器名称、原始程序和条目文本。使用关系数据库有许多缺点:

  • 如果数据库不工作怎么办? (文件系统是一个基本组件(我是否提到过它比关系数据库简单得多?);syslog 守护进程是一个简单的组件,只完成一项工作(Unix 设计中的一个常见功能),因此预计会做得很好并且可靠。)
  • 如何记录数据库操作? (好吧,通过数据库本身 - 毕竟所有日志都包含来自内核和系统日志守护进程的条目 - 但更复杂的数据库再次使这变得更加困难和不可靠)。
  • 如何访问日志条目?将catgrepless与 SQL 查询的简单性进行比较。文件权限,嗯,我不知道在典型的关系数据库中如何处理这个问题。
  • 多服务器安装不会在本地存储日志,而是使用自 Unix 诞生以来就内置在 syslog 守护进程中的远程日志功能。使用 UNIX 日志架构很容易实现这一点;您无法在该复杂性预算上运行复制数据库。

答案4

这将使“tail -f /var/log/apache/access.log”之类的事情变得不可能。

为什么您认为将所有内容都放在一个文件中会更好?

相关内容