16.3 過濾日誌輸出

如果不結合任何參數呼叫 journalctl,它將顯示日誌的完整內容,最舊的項目列在最前面。可按特定的參數和欄位過濾輸出。

16.3.1 依據開機編號過濾

journalctl 可以依據特定的系統開機編號過濾訊息。若要列出所有可用的開機,請執行

# journalctl --list-boots
-1 097ed2cd99124a2391d2cffab1b566f0 Mon 2014-05-26 08:36:56 EDT—Fri 2014-05-30 05:33:44 EDT
 0 156019a44a774a0bb0148a92df4af81b Fri 2014-05-30 05:34:09 EDT—Fri 2014-05-30 06:15:01 EDT

第一欄列出開機偏移︰0 表示目前的開機,-1 表示上一次開機,-2 表示再上一次的開機,依此類推。第二欄包含開機 ID,其後是特定開機的限制時間戳記。

顯示目前開機中的所有訊息︰

# journalctl -b

如果需要查看上一次開機的記錄訊息,請新增一個偏移參數。下面的範例將輸出上一次開機的訊息︰

# journalctl -b -1

另一種方法是依據開機 ID 列出開機訊息。要實現此目的,請使用 _BOOT_ID 欄位︰

# journalctl _BOOT_ID=156019a44a774a0bb0148a92df4af81b

16.3.2 依據時間間隔過濾

可透過指定開始日期和/或結束日期來過濾 journalctl 的輸出。日期規格應採用「2014-06-30 9:17:16」這樣的格式。如果省略時間部分,則會假設為午夜。如果省略秒,則會假設為「:00」。如果省略日期部分,則會假設為目前日期。您也可以不採用數字表示法,而是指定關鍵字「yesterday」、「today」或「tomorrow」。它們表示當日前一天、當日或者當日後一天的午夜。如果指定「now」,則表示目前時間。您還可以指定以 -+ 為字首的相對時間,分別表示目前時間之前或之後的特定時間。

僅顯示從現在開始產生的新訊息,並持續更新輸出︰

# journalctl --since "now" -f

顯示從昨天午夜到 3:20AM 的所有訊息︰

# journalctl --since "today" --until "3:20"

16.3.3 依據欄位過濾

您可以按特定的欄位過濾日誌輸出。要比對的欄位語法為 FIELD_NAME=MATCHED_VALUE,例如 _SYSTEMD_UNIT=httpd.service。您可以在單個查詢中指定多個比對條件,以更精確地過濾輸出訊息。如需預設欄位的清單,請參閱 man 7 systemd.journal-fields

顯示特定程序 ID 產生的訊息︰

# journalctl _PID=1039

顯示屬於特定使用者 ID 的訊息︰

# journalctl _UID=1000

顯示來自核心環緩衝區的訊息 (與 dmesg 產生的結果相同)︰

# journalctl _TRANSPORT=kernel

顯示來自服務之標準輸出或錯誤輸出的訊息︰

# journalctl _TRANSPORT=stdout

僅顯示指定服務產生的訊息︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service

如果指定了兩個不同的欄位,則僅顯示同時與兩個運算式相符的項目︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488

如果兩個比對參考了同一個欄位,則顯示與兩個運算式中任意一個相符的所有項目︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service

可以使用「+」分隔符將兩個運算式組合成一個邏輯「OR」。下面的範例將顯示來自程序 ID 為 1480 之 Avahi 服務程序的所有訊息,以及來自 D-Bus 服務的所有訊息︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service