syslog - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
closelog, openlog, syslog - システムロガーにメッセージを送る
書式
#include <syslog.h>
void openlog(const char *
ident
, int
option
, int
facility
);
void syslog(int
priority
, const char *
format
, ...);
void closelog(void);
#include <stdarg.h>
void vsyslog(int
priority
, const char *
format
, va_list
ap
);
説明
closelog
()はシステムのログ記録用プログラム(システムロガー
syslogd
(8) )ヘの接続を終了する。
closelog
()は必須ではない。
openlog
()はログを出力しようとしているプログラムからログ記録用プログラムへの
接続を開始する。
ident
で指定した文字列(通常は
openlog
()したプログラムの名前)はログ出力の一文一文に追加され、どのプログラム
が出力したログかを識別するために使われる。
option
引き数は、
openlog
()の動作とその後の
syslog
()の呼び出しを制御するフラグを指定する。
facility
引き数は、後で
syslog
()を呼び出す際に facility が指定されなかった場合に使用される
デフォルト値を決定する。
option
と
facility
については後述する。
openlog
()は必須ではなく、必要に応じて
syslog
()から呼び出される。
syslog
()が呼び出した場合、
ident
のデフォルト値は NULL になる。
syslog
()はログメッセージを出力し、
syslogd
(8) がそのメッセージを記録する。
priority
引き数は
facility
と
level
との組合せで指定する。
facility
と
level
の取りうる値は後述する。
残りの
format
引き数は
printf
(3) と似たスタイルの書式とその書式に与える値である。
format
中の2文字 %m はその時点での
errno
に関連するエラーメッセージ文字列
(
strerror
)によって置き換えられる。
vsyslog
()関数は
syslog
()と同じ機能を持つが、可変引き数リストを指定することができる点が異なる。
指定された引き数は、
stdarg
(3) 可変引き数リストマクロを用いて取得される。
引き数
ここでは option と facility と priority の値を設定するのに使用されるパラメータを説明する。
option
下記の値を OR したものが openlog ()の option 引き数になる
- LOG_CONS
- エラーがあれば、システムロガーに送る一方でシステムコンソールにも直接書く。
- LOG_NDELAY
- ログ記録用プログラムとの接続を即座に開始する (通常は、最初のメッセージが記録される時に接続を開く)
- LOG_NOWAIT
- メッセージを記録する際に生成される子プロセスの終了を待たない。 (GNU C ライブラリは子プロセスを生成しない。 したがって、このオプションは Linux では無効である。)
- LOG_ODELAY
- LOG_NDELAY の反対。 syslog ()が呼ばれるまで、接続の開始を行わない。 (このオプションはデフォルトであり、特に指定する必要はない。)
- LOG_PERROR
- stderr にも出力する。(POSIX.1-2001 では定義されていない)
- LOG_PID
- 個々のメッセージに PID を含める。
facility
facility 引き数はメッセージに記録されるプログラムのタイプを指定するために使われる。 これによって異なるタイプのプログラムからのメッセージは異なる扱いを するように設定ファイル( syslog.conf (5) )に定義できる。
- LOG_AUTH
- セキュリティ/認証 メッセージ (非推奨。代わりに LOG_AUTHPRIV を使用すること)
- LOG_AUTHPRIV
- セキュリティ/認証 メッセージ (プライベート)
- LOG_CRON
- クロックデーモン ( cron と at )
- LOG_DAEMON
- 特定の facility 値を持たないシステムデーモン
- LOG_FTP
- ftp デーモン
- LOG_KERN
- カーネルメッセージ
- LOG_LOCAL0 から LOG_LOCAL7
- ローカルな使用のためにリザーブされている
- LOG_LPR
- ラインプリンタ・サブシステム
- LOG_MAIL
- メール・サブシステム
- LOG_NEWS
- USENET ニュース・サブシステム
- LOG_SYSLOG
- syslogd によって内部的に発行されるメッセージ
- LOG_USER (デフォルト)
- 一般的なユーザレベルメッセージ
- LOG_UUCP
- UUCPサブシステム
level
これはメッセージの優先度を指定する。 優先度の高いものから低いものの順で下記する。
- LOG_EMERG
- システムが使用不可
- LOG_ALERT
- 直ちに行動を起こさなければならない
- LOG_CRIT
- 危険な状態
- LOG_ERR
- エラーの状態
- LOG_WARNING
- ワーニングの状態
- LOG_NOTICE
- 通常だが重要な状態
- LOG_INFO
- インフォメーションメッセージ
- LOG_DEBUG
-
デバッグレベルのメッセージ
setlogmask (3) 関数を使用して、 指定されたレベルのメッセージだけを記録するように 制限することができる。
準拠
openlog (), closelog (), syslog ()は SUSv2 と POSIX.1-2001 で規定されている (但し vsyslog ()は除く)。 POSIX.1-2001 では facility として LOG_USER と LOG_LOCAL* の値が規定されているだけである。 しかしながら、 LOG_AUTHPRIV と LOG_FTP という例外はあるが、 それ以外の facility の値は多くの Unix システムで使われている。 option の値の LOG_PERROR の値は、 POSIX.1-2001 では規定されていないが、 Unix の多くのバージョンで使用可能である。
履歴
syslog ()ファンクション・コールは 4.2BSD から実装された。 4.3BSD には openlog (), syslog (), closelog (), setlogmask ()が実装されている。 また、4.3BSD-Reno には vsyslog ()が実装されている。 当然ながら初期の v* 関数は <stdarg.h> とは互換性のない <varargs.h> の仕組を使用したものである。
注意
openlog ()呼び出しの ident 引き数は、値がそのまま保持されていることを前提にしている。 それゆえ、 ident で指定された文字列が変更されると、 syslog ()は変更された文字列の追加するだろうし、 指定された文字列が存在しなくなった場合、結果は未定義である。 最も移植性がある方法は、文字列定数を使用することである。
ユーザーから与えられたデータを format として渡してはならない。
代わりに
syslog(priority, "%s", string);
を使うこと。