结合 tail && journalctl

bik*_*key 66 tail systemd journalctl

我正在跟踪我自己的应用程序和 postgres 的日志。

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log
Run Code Online (Sandbox Code Playgroud)

我需要包含 pgpool 的日志。它曾经是 syslog,但现在它在 journalctl 中。

有没有办法将 tail -f && journalctl -f 绑定在一起?

小智 97

你可以使用:

journalctl -u service-name -f
Run Code Online (Sandbox Code Playgroud)

-f, --关注

仅显示最近的日记帐分录,并在新分录附加到日记帐时连续打印它们。

在这里,我添加了“服务名称”以将这个答案与其他答案区分开来;您替换实际服务名称而不是文本service-name


don*_*sti 20

您可以将日志条目转发到journal

systemd-cat tail -f /tmp/myapp.log /var/log/postgresql.log
Run Code Online (Sandbox Code Playgroud)

然后使用journalctl -f... 虽然正如马克提到的那样,这将打印所有日记帐分录。


仅过滤来自这些日志和特定单元的消息的一种方法是使用不同的SYSLOG_IDENTIFIER即编辑单元文件并在该[Service]部分下添加例如

SyslogIdentifier=my_stuff
Run Code Online (Sandbox Code Playgroud)

重新启动单元然后systemd-cat使用相同的标识符运行

systemd-cat -t my_stuff tail -f /tmp/myapp.log /var/log/postgresql.log
Run Code Online (Sandbox Code Playgroud)

最后只查询该特定标识符的日志:

journalctl -f -t my_stuff
Run Code Online (Sandbox Code Playgroud)


Jef*_*ler 5

如果您有可用的 bash,则可以使用进程替换作为tail参数之一:

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log <(journalctl -f)
Run Code Online (Sandbox Code Playgroud)

  • 您可能不想关注整个日志,而只想关注 pgpool 单元的那些。假设服务名为`pgpool.service`,试试`journalctl -fu pgpool.service`。另外,如果您不是以 root 身份运行它,请确保该用户在 `systemd-journal` 组中! (5认同)

小智 1

尝试类似的东西:

tail -f /tmp/myapp.log >> /tmp/tail.log &
journalctl -f >> /tmp/tail.log &
tail -f /tmp/tail.log
Run Code Online (Sandbox Code Playgroud)