进一步阅读

进一步阅读

使用sudo journalctl -u {service}我可以看到特定服务的日志。

  1. 如何找到关联的日志文件?
  2. 以编程方式监视日志文件的最佳方法是什么? (我的意思是一个基于日志文件中出现的内容进行反应的程序)

答案1

具有 s6、runit、perp、nosh、daemontools-encore 等的系统。这样做服务管理工作。每个主要服务都有一组可以单独监控的单独关联的日志文件,以及分散的日志记录机制。

然而 systemd 并不是这样工作的。任何给定服务都没有单独的“关联日志文件”。没有要监视的此类文件。

所有日志输出都集中到单个中央守护进程 中,systemd-journald并且该守护进程将其写入单个流,所有服务的日志输出都合并到单个中央日志中/{run,var}/log/journal/

选项-ujournalctl后处理过滤器,用于过滤从单个中央日志打印的内容,所有日志条目都标记有(除其他外)相关服务的名称。所有东西都呈扇形散开,然后必须经过过滤才能将其分离回(大约)原来的样子。

systemd 的方式是添加journalctl -f适当的过滤器,或者直接使用 systemd 特定的 API 为其日志编写自己的程序。

进一步阅读

答案2

1.) 如果你的Linux发行版使用了journald完整的范围,将不会有易于阅读的传统日志文件,如@JdeBP提及。日志文件使用二进制格式,传统日志文件工具不易解析。

2.) 如果journalctl -u {service}有您需要的信息,那么您可以使用journalctl -f -u {service}输出并将其通过管道传输到解析日志并触发任何所需反应的程序。除此之外的任何内容都可能特定于您选择的 Linux 发行版。

例如,Debian 9 (Stretch) 在默认配置中保留了journald传统的/dev/logsyslog 输入套接字。但如果rsyslogd已安装,journald则配置为将传入的系统日志消息转发给它。

journald其他 Linux 发行版可能与结构不同的传统 syslog 守护进程之间存在关系。

相关内容