Logging

如何按程序名稱過濾 journalctl 輸出?

  • July 25, 2018

當一個程序登錄到 systemd 時,它的程序名稱被記錄下來並作為標識符顯示在 journalctl 輸出中。

$ systemd-cat echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
...
Jul 25 13:52:26 mycomputer echo[25098]: test

但是,過濾該名稱似乎不起作用。

$ journalctl -f -t echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
$ journalctl -f -u echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --

當我手動指定標識符時,將顯示標識符而不是程序名稱,並且過濾有效。

$ systemd-cat -t myapp echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer myapp[25213]: test
$ journalctl -f -t myapp
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer myapp[25213]: test

如何過濾程序名稱的 journalctl 輸出?

剛剛想通了。您可以通過指定使用任何systemd 日誌欄位作為過濾器<FIELD_NAME>=<VALUE>

以下欄位對此問題很有用:

_COMM=, _EXE=, _CMDLINE=

日誌條目源自的程序的名稱、可執行路徑和命令行。

因此,為了過濾命令名稱,請使用journalctl -f _COMM=<command-name>

$ journalctl -f _COMM=echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:52:26 mycomputer echo[25098]: test
Jul 25 13:56:08 mycomputer myapp[25213]: test

引用自:https://serverfault.com/questions/923435