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

Iva*_*van 8 logs

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

phu*_*ehe 16

它是Unix 哲学的一部分。这个想法是文本文件不受程序锁定的影响,每个人都可以使用他们喜欢的任何技术。为了更进一步,经常使用平面文件,而不是像 XML 这样的标记语言(尽管我看到程序也以 XML 格式存储东西)。

在谷歌搜索中,我发现了这篇关于纯文本的文章,并附有关于 Unix 哲学的评论。


ech*_*hox 15

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

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

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

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

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

它是由你决定。


Gil*_*il' 10

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

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

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

这是一个好主意。我们称之为syslog。它的工作是将日志条目发送到 syslog 守护进程。

和一个统一表来保存所有应用程序的所有日志条目?

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

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