Provided by: manpages-ja_0.5.0.0.20210215+dfsg-1_all 

名前
logger - システムログにメッセージを書き込む
書式
logger [options] [message]
説明
logger はシステムログにメッセージを記入する。
指定が任意の引き数 message が存在すれば、それがログに書き込まれる。引き数 message が存在せず、-f オプショ
ンも指定されていない場合は、標準入力がログに記録される。
オプション
-d, --udp
データグラム (UDP) のみを使用する。デフォルトでは、 /etc/services で定義されている syslog ポートに
接続が試みられる。それは、たいてい 514 番である。
接続先の指定については、--server や --socket もご覧いただきたい。
-e, --skip-empty
ファイルを処理する際に空行を無視する。空行とは、文字を一つも含まない行のことである。 従って、ホワ
イトスペースのみからなる行は、 空行とは見なされない。なお、--prio-prefix オプションが指定された場
合、優先度指定の部分は行の一部ではないことに気を付けていただきたい。 つまり、このモードでの空行と
は、優先度を表す接頭辞 (たとえば、<13>) の後ろに文字が全く存在しない行のことである。
-f, --file file
指定した file の内容をログに記入する。 このオプションは、コマンドラインにおけるメッセージ指定と併
用することができない。
-i 各行に logger プロセスの PID を記入する。
--id[=id]
各行に logger プロセスの PID を記入する。指定が任意の引き数 id を指定すると、それが logger コマン
ドの PID の代わりに使用される。複数のメッセージを送出するスクリプトでは、--id=$$ (PPID) を使用する
とよい。
なお、システムのロギングを下支えしているものが (たとえば、 /dev/log をリッスンしている systemd
が)、ローカルソケットの資格情報 (credentials) に従って、メッセージ中の指定された PID を上書きして
しまうことがあるのに注意していただきたい。logger は、そうしたソケットの資格情報の値を、指定された
id にすることができるわけだが、それは、ユーザがルート権限を持ち、しかも指定された PID を持つプロセ
スが存在するときだけであって、 さもなければ、ソケットの資格情報は変更されず、その問題は暗黙裡に無
視されるのである。
--journald[=file]
systemd のジャーナルに書き込みをする。記入事項 (entry) は、file を指定していれば、そのファイルから
読み込まれ、指定していなければ、標準入力から読み込まれる。 各行は、journald の解するフィールドで始
まっていなければならない。詳細については systemd.journal-fields(7) をご覧いただきたい。MESSAGE_ID
フィールドを使用するのは、記入事項の検索を容易にするので、一般によい考えである。 例を二つ挙げよ
う。
logger --journald <<end
MESSAGE_ID=67feb6ffbaf24c5cbec13c008dd72309
MESSAGE=The dogs bark, but the caravan goes on.
DOGS=bark
CARAVAN=goes on
end
logger --journald=entry.txt
--journald は、たとえば優先度 (priority) のような、他のオプションの値を無視することに注意していた
だきたい。 だから、優先度が必要なら、それを入力に含めなければならない。つまり、PRIORITY フィールド
を使用するのである。なお、単に journalctl を実行するだけだと、MESSAGE フィールドしか表示されな
い。残りのフィールドも見るには、journalctl --output json-pretty を使用すればよい。
MESSAGE に改行を入れるには (訳注: 言い換えれば、複数行にするには)、MESSAGE を複数回指定する。これ
は、特例処理であり、複数回現れるのが他のフィールドの場合は、配列として journal に格納されることに
なる。
--msgid msgid
RFC5424 の MSGID フィールドを指定する。msgid 内ではスペース文字が使えないことに注意していただきた
い。 このオプションが有効なのは、--rfc5424 も一緒に指定したときだけである。 そうでない場合は、黙っ
て無視される。
-n, --server server
システムログのソケットではなく、指定されたリモートの syslog サーバ、server に書き込む。 --udp や
--tcp が指定されていない場合、logger は、まず UDP を使用しようとし、それに失敗すると、TCP 接続を試
みる。
--no-act
ログメッセージをシステムログに書き込むこと以外のすべてを実行し、 その後、ジャーナルへの接続を切
る。このオプションは、テストのために --stderr と一緒に使うことができる。
--octet-count
メッセージの送信に RFC 6587 のオクテット計算フレーミングメソッド (octet counting framing method)
を使用する。このオプションを使用しない場合、デフォルトのメソッドは、UDP ではノーフレーミングであ
り、TCP では RFC6587 の非透過フレーミング (octet stuffing としても知られる) である。
-P, --port port
指定された port を使用する。このオプションが指定されない場合、 ポートはデフォルトが使われる。すな
わち、UDP接続では syslog、TCP 接続では syslog-conn である。
-p, --priority priority
指定された優先度 priority でログにメッセージを記入する。 優先度は、数値で指定してもよ
く、facility.level の組み合わせで指定してもよい。たとえば、-p local3.info と指定すると、ファシリ
ティが local3、レベルは informational としてメッセージが記録される。デフォルトは user.notice であ
る。
[訳注] ファシリティ (facility) というのは、わかりにくい言葉だ。 だが、logger コマンドでは、ファシ
リティの値のそれぞれを、出力するメッセージの分類 (対象分野) ぐらいに考えておけばよいのでは
ないかと思う。ファシリティが mail なら当然 mail 関係だし、auth ならセキュリティや認証関係
のメッセージということだ。user や local は、その他といったところだろうか。レベル (level)
は「重大度、深刻度」。 そして、こうしたファシリティとレベルにより、/etc/syslog.conf (また
は /etc/rsyslog.conf) の設定に基づいて、出力先のログファイルが決まるわけである。
ファシリティやレベルの数値による表現については、 「ファシリティとレベル」セクションをご覧
いただきたい。
なお、手元で試してみたところでは、この --priority オプションでは、レベルを数値で指定するこ
とはできるが、 ファシリティを数値で指定することはできないようだ。 数値をそのまま使うの
も、--prio-prefix のように 8 倍してレベルを足すのも、うまく行かなかった。
--prio-prefix
標準入力から読み込むすべての行で sysylog の接頭辞 (prefix) を捜す。この接頭辞は、山かぎカッコ (<>)
で囲まれた 10 進数であり、 ファシリティとレベルの両方をエンコードしたものである。数値は、ファシリ
ティを (訳注: その数値表現を) 8 倍し、それにレベルを加えて作る。たとえば、local0.info なら、ファシ
リティは 16、レベルは 6 なので <134> になる。
接頭辞がファシリティを含んでいない場合、ファシリティは、-p オプションで指定したものがデフォルトで
ある。 同様に、接頭辞が全く指定されていない場合、その行は、-p で指定された優先度 priority を使って
ログに記録される。
このオプションは、コマンドライン引き数として指定したメッセージに対しては働かない。
[訳注] 別の角度から説明すると、 これは、入力するメッセージの行中でファシリティとレベルを指定する
方法だと言えるだろう。 メッセージをファイル、または標準入力から入力するとき (コマンドライ
ンの引き数としてではない)、logger コマンドに --prio-prefix オプションを付け、メッセージ各
行の行頭には <134> などと書いておく。そうすると、logger がその行を優先度 local0.info の
メッセージなどと解釈して、適切なログファイルに送ってくれるのである。 <134> などの接頭辞が
ログに書き込まれるわけではない。
--rfc3164
リモートサーバにメッセージを送るのに RFC 3164 の BSD syslog プロトコルを使用する。
--rfc5424[=without]
リモートサーバにメッセージを送るのに RFC 5424 の syslog プロトコルを使用する。 指定が任意の
without という引き数には、notq, notime, nohost という値をコンマで区切ったリストが使用できる。
notq という値は、送信するメッセージに時間品質構造化データ (the time-quality structured data) を記
入しないようにする。 この時間品質情報が示すのは、ローカルクロックが (訳注: 信用できる外部の時刻
サーバとメッセージ送信時に) 同期されていたかどうか、及び、タイムスタンプが (訳注: 同期と同期の間
に) ずれるかもしれない最大のマイクロセコンド数である。 時間品質は、--sd-id timeQuality が指定され
た場合にも自動的に抑制される。
notime という値は (暗黙裡に notq も設定する)、ISO-8601 フォーマットの省略なしの送信側タイムスタン
プを記入しないようにする。 マイクロセコンドやタイムゾーンを含むフォーマットのことである。
nohost という値は、メッセージのヘッダに gethostname(2) の情報を入れないようにする。
RFC 5424 プロトコルは、バージョン 2.26 以来、logger のデフォルトになっている。
-s, --stderr
メッセージをシステムログだけでなく、標準エラーにも出力する。
--sd-id name[@digits]
RFC 5424 メッセージヘッダで使う構造化データ要素の識別名 (a structured data element ID) を指定す
る。新しい要素を導入するには、このオプションを --sd-param の前で使わなければならない。構造化データ
要素の数には上限がない。ID (識別名。name には @digit が続くこともある) は、大文字小文字を区別
し、要素のタイプと用途を一意に同定している。同じ ID は、一つのメッセージに 1 回しか現れてはならな
い。@digit の部分は、ユーザが定義した非標準的な ID では必須である。
現在 logger が (訳注: --rfc5424 オプションを指定したときにデフォルトで) 生成するのは、標準要素
timeQuality のみである。RFC 5424 には、そのほか origin 要素 と meta 要素が記述されている (前者に
は、ip, enterpriseId, software, swVersion といったパラメータが、後者には、sequenceId, sysUpTime,
language といったパラメータがある)。こうした要素 ID は、@digits という接尾辞なしで指定することがで
きる。
--sd-param name="value"
構造化データ要素のパラメータを、名前と値の組み合わせで指定する。 このオプションを使うとき
は、--sd-id の後ろに置かなければならない。なお、同じ要素について、2 回以上指定することもでき
る。value を囲む引用符は必須であり、しかも、 コマンドライン上ではエスケープしなければならないこと
に注意していただきたい。
logger --rfc5424 --sd-id zoo@123 \
--sd-param tiger=\"hungry\" \
--sd-param zebra=\"running\" \
--sd-id manager@123 \
--sd-param onMeeting=\"yes\" \
"this is message"
上のコマンドは、次のようなメッセージを生成する。
<13>1 2015-10-01T14:07:59.168662+02:00 ws kzak - - [timeQuality tzKnown="1" isSynced="1"
syncAccuracy="218616"][zoo@123 tiger="hungry" zebra="running"][manager@123 onMeeting="yes"] this
is message
-S, --size size
メッセージの許可される最大のサイズを size にする。デフォルトは、1KiB の文字である。これは、昔から
使われている上限であり、RFC 3167 で規定されている。なお、RFC 5424 で、この上限は融通が利くように
なった。 受信側が RFC 5424 に準じているならば、少なくとも 4KiB のメッセージを処理できると考え
て、まず間違いがない。
どんなタイプの syslog プロトコルを使っていようと、たいていの受信側が 1 KiB より大きいメッセージを
受け入れる。従って、この --size オプションが (--rfc5424 を使用した場合だけではなく) あらゆる場合に
logger に対して働くことになる。
注意: メッセージサイズの上限というのは、syslog のヘッダを含む、メッセージサイズ全体の上限である。
ヘッダのサイズは、選択したオプションやホスト名の長さによって変わってくる。 大雑把に言って、ヘッダ
が 50 から 80 文字 (characters) より長いことはあまりない。メッセージの最大ザイズを選択するときは、
受信側の方でもその最大サイズをサポートするようにしておくことが重要である。 さもないと、メッセージ
は、尻尾がちょん切られてしまうかもしれない。 もう一度大雑把に言うと、2 から 4 KiB のメッセージサイ
ズなら、たいてい問題がないはずだ。 それより大きい場合は、ちゃんと動作するか確認するべきである。
--socket-errors[=mode]
Unix ソケット接続に関するエラーを表示する。mode の値は、off, on, auto の何れかである。mode が auto
の場合、logger は、init プロセスが systemd かどうか検出しようとする。そして、もしそうならば、
/dev/log がブートの早い段階から使用可能になっていると想定する。 他の init システムで、/dev/log を
欠いている場合、ここで述べているようなエラーが起きることはない。そのへんは、openlog(3) システム
コールを使用するメッセージ処理と同じことである。logger(1) も、 バージョン 2.26 より前は openlog を
使用していた。そのため、Unix ソケットに送信したメッセージが消失しても、当時は検出できなかったので
ある。
デフォルトの mode は、auto である。エラー表示が有効ではないと、メッセージの消失があっても、通知さ
れず、logger の実行は、成功のステータスで終わることになる。
-T, --tcp
ストリーム (TCP) のみを使用する。デフォルトでは、/etc/service で定義されている syslog-conn ポート
に接続が試みられる。それは、たいてい 601 番である。
接続先の指定については、--server や --socket もご覧いただきたい。
-t, --tag tag
ログに記録されるすべての行に tag という指標を付ける。デフォルトのタグは、端末にログインしている
ユーザの名前 (あるいは、実効ユーザ ID に基づいたユーザ名) である
-u, --socket socket
システムログのソケットの代わりに、指定された socket に書き込む。
-- 引き数のリストの終わりを示す。これを使えば、message をハイフン (-) で始めることができる。
-V, --version
バージョン情報を表示して終了する。
-h, --help
ヘルプを表示して終了する。
終了ステータス
logger ユーティリティは、実行に成功すると、0 の終了ステータスで、エラーが起きた場合は、0 より大きい終了ス
テータスで終了する。
ファシリティとレベル
[訳注] 以下、ファシリティやレベル名の後ろに、カッコに入れて、数値による表現を付けておく。 こうした数値
は、--prio-prefix で使用できる。
有効なファシリティ名 (メッセージの分類):
auth(4)
authpriv(10) 取り扱いに注意を要するセキュリティ情報用
cron(9)
daemon(3)
ftp(11)
kern(0) ユーザスペースのプロセスからは生成できない。たとえ kern を指定しても、自動的に user に
変更される
lpr(6)
mail(2)
news(7)
syslog(5)
user(1)
uucp(8)
local0(16)
to
local7(23)
security auth の同義語で、非推奨
有効なレベル名 (重大度):
emerg(0)
alert(1)
crit(2)
err(3)
warning(4)
notice(5)
info(6)
debug(7)
panic emerg の同義語で、非推奨
error err の同義語で、非推奨
warn warning の同義語で、非推奨
こうしたファシリティやレベルの優先順位や目的については、syslog(3) を参照していただきたい。
準拠
この logger コマンドは IEEE Std 1003.2 ("POSIX.2") に準拠しているはずである。
用例
logger System rebooted
logger -p local0.notice -t HOSTIDM -f /dev/idmc
logger -n loghost.example.com System rebooted
作者
オリジナルの logger コマンドが書かれたのは、カルフォルニア大学で、1983 年から 1993 年のことだった。その
後、次の者たちが書き直した。
Karel Zac <kzak@redhat.com>
Rainer Gerhards <rgerhards@adiscon.com>
Sami Kerola <kerolasa@iki.fi>
関連項目
journalctl(1), syslog(3), systemd.journal-fields(7)
入手方法
この logger コマンドは Util-linux パッケージの一部であり、Linux Kernel Archive
<https://www.kernel.org/pub/linux/utils/util-linux/> から入手できる。
util-linux November 2015 LOGGER(1)