/var/log/messages,/var/log/syslog和/var/log/kern.log之间的区别是什么?

为了内核日志记录的目的,为什么我在/var/log/messages、/var/log/syslog和/var/log/kern.log中有三个不同且不相互包含的日志级别?

1请注意,/var/log/messages 是非Debian/non-Ubuntu系统(如RHEL或CentOS系统)上的syslog通常位置。 - Thomas Ward
请注意:journalctl正在逐渐取代syslog成为监控系统消息的首选资源。 - WinEunuuchs2Unix
syslog和syslog.1有什么不同? - haytham-med haytham
@haytham-medhaytham,你可以在这个链接中找到有关"日志轮转"部分的相关信息。 - wtj
2个回答

Syslog是一个标准的日志记录工具。它收集各种程序和服务(包括内核)的消息,并根据设置将它们存储在一组通常位于/var/log下的日志文件中。在某些数据中心设置中,每个设备都有自己的日志,这时候syslog也非常方便。只需设置一个专用的syslog服务器,通过网络收集所有单独设备的日志。Syslog还可以将日志保存到数据库和其他客户端。

根据我的/etc/syslog.conf,默认的/var/log/kern.log只捕获任何日志级别的内核消息;即dmesg的输出。

/var/log/messages则旨在存储有价值、非调试和非关键的消息。这个日志应被视为“一般系统活动”日志。

/var/log/syslog则记录除了与认证相关的消息之外的所有内容。

由syslog管理的其他有趣的标准日志包括/var/log/auth.log/var/log/mail.log


2020更新

你可能仍然会遇到syslog,但默认设置已经改变。

journald已经取代了syslog,在包括Ubuntu在内的许多系统中。

这是相关的,因为你不会再经常找到/var/log/messagesjournald不会写入明文日志 - 它使用自己的压缩和部分认证的格式。

在线搜索例如journalctl cheatsheet,或者自己研究man 8 systemd-journaldman 1 journalctl

Syslog和journald在一定程度上是相互兼容的;你可以在它们之间双向传输日志。然而,使用journald你将无法获得类似于/var/log/messages的明文日志;而使用syslog你将无法获得结构化(journalctl -o json-pretty)和认证的日志记录。


1请提供您所提到的任何索赔的依据? - Goaler444
9@Goaler444,man syslog.conf - ulidtko
2请注意,内核环形缓冲区中的条目(dmesg读取的内容)如果是由用户空间进程编写的,默认情况下不会被写入任何/var/log文件中。如果您想在/var/log中看到这些消息,请在rsyslogd的配置中设置$KLogPermitNonKernelFacility on。有关更多详细信息,请参阅我的回答http://askubuntu.com/a/490900/297973。 - Vanessa Phipps
9值得注意的是,Ubuntu(自Natty版本以来)不再使用/var/log/messages,而是将所有日志存储在/var/log/syslog中。 - jackbravo
2在Ubuntu 16.04中,/var/log/syslog确实是/var/log/kern.log的一个干净的超集,但需要注意不同的日志轮转策略。例如,在我的系统中(默认配置未更改),今天和昨天的消息保存在/var/log/kern.log的单个文件中,而大部分昨天的syslog消息则保存在/var/log/syslog.1中。 - Marcus Junius Brutus
1现在看一下:man rsyslog.conf - Elliptical view
1至少在某些系统上,/var/log/messagesdmesg 记录日志的位置。 FWIW...(Red Hat) - rogerdpack

  • syslog 包含除了认证类型之外的所有消息。
  • messages 只包含通用的非关键消息。类别包括 infonoticewarn
  • 要获取完整的日志,请查看 /var/log/syslog/var/log/auth.log
  • AFAIK /var/log/kern.log 包含内核消息。
  • 日志文件只是在 /etc/syslog.conf 中规定的约定。
  • 阅读 syslog(3) 获取更多信息。

请查看此页面 关于 messages 和 syslog 的区别

它说 /var/log/messages /var/log/syslog


1您提供的链接已失效。 - slm
2@slm 这是存档版本 - ignis
4重复ulidtko的回答:值得注意的是,自从Natty版本以来,Ubuntu不再使用/var/log/messages,而是将所有日志存储在/var/log/syslog中。 - jackbravo