名前
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);
#define _BSD_SOURCE #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 | |
デバッグレベルのメッセージ | |
準拠
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 の多くのバージョンで使用可能である。
注意
openlog() 呼び出しの ident 引き数は、値がそのまま保持されていることを前提にしている。 それゆえ、 ident で指定された文字列が変更されると、 syslog() は変更された文字列の追加するだろうし、 指定された文字列が存在しなくなった場合、結果は未定義である。 最も移植性がある方法は、文字列定数を使用することである。
ユーザーから与えられたデータを format として渡してはならない。 代わりに
syslog(priority, "%s", string);
を使うこと。関連項目
logger(1), setlogmask(3), syslog.conf(5), feature_test_macros(7), syslogd(8)