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


8

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


1
重构的附件问题:考虑到* nix非常成熟,为什么日志(&conf)命名约定+位置仍然如此零星和不一致?如果文件扩展名是纯粹的人用,为什么不能(为传统和符号链接)的所有开发者同意使用.log,并.conf作为标识符?
dhaupin '16

Answers:


16

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

在谷歌搜索中,我发现了这个关于纯文本的不错的文章,其中包含有关Unix哲学的评论。



15

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

如果愿意,可以使用grep分析它们,可以用自己喜欢的寻呼机打开它们,并且可以使用自己喜欢的脚本语言(如Perl,Python等)来处理它们,而无需任何其他库。

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

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

守护程序接受消息并进行日志记录。各种平台的syslog守护程序都有几种不同的实现,还可以将消息记录到数据库中。

它是由你决定。


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日志记录架构很容易实现。您不能在该复杂性预算下运行复制的数据库。


1

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

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


1
grep '\[apache\]' | tail -f /dev/stdin-但让每用户登录服务器(当用户无权访问其他用户的日志时)。
Maciej Piechotka 2010年

“为什么您认为将所有内容放在一个文件中会更好?” -因为我喜欢SQL ;-)而且因为我不喜欢(而且几乎不能)记住很多事情。
伊万

11
当您只知道SQL时,一切看起来都像一个关系数据库问题。
David Mackintosh 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.