SYSLOG(3) | FreeBSD Library Functions Manual | SYSLOG(3) |
名称
syslog, vsyslog, openlog, closelog, setlogmask — システムログを制御するライブラリ
Standard C Library (libc, -lc)書式
#include < syslog.h>#include < stdarg.h>
void
syslog( int priority, const char *message, ...);
void
vsyslog( int priority, const char *message, va_list args);
void
openlog( const char *ident, int logopt, int facility);
void
closelog( void);
int
setlogmask( int maskpri);
解説
syslog() 関数は、システムのメッセージロガーにメッセージを書き込みます。そして、メッセージは、必要に応じてシステムコンソール、ログファイル、ログインしたユーザ、他のマシンへの転送が書き込まれます。 ( syslogd(8) 参照)。 メッセージは、‘ %m
’が現在のエラーメッセージで置き換えられることを除いて、 printf(3) フォーマット文字列と同一です。 (グローバル変数 errno によって表示されるように。 strerror(3) 参照)。何も存在しない場合は、末尾に改行が追加されます。
vsyslog() 関数は、 stdarg(3) の可変長引数機能を使ってすでに引数がキャプチャ (捕らえられて) されている場合の代替形式です。
メッセージは優先順位 ( priority) のタグが付けられます。優先順位は、 facility と level にエンコード (符号化) されます。 facility は、メッセージを作成するシステムの一部を記述します。 level は、次のように順序付けられた (高い方から低い方へ) 一覧から選択します。
- LOG_EMERG
- パニック状態。これは、通常は全ユーザに放送 (送信) されます。
- LOG_ALERT
- 壊れたシステムデータベースのような、直ちに修正すべき状態。
- LOG_CRIT
- 危険な状態、例えばハードデバイスエラー。
- LOG_ERR
- エラー。
- LOG_WARNING
- 警告メッセージ。
- LOG_NOTICE
- エラー状態ではないが、特別に扱われるべき可能性のある状態。
- LOG_INFO
- インフォメーションメッセージ。
- LOG_DEBUG
- 通常はプログラムのデバッグの場合にのみ使う情報を含んでいるメッセージ。
openlog() 関数は、 syslog() および vsyslog() によって送られたメッセージのより特化された処理を提供します。 ident 引数数は、すべてのメッセージの前に追加される文字列です。 logopt 引数は、次の値の 1 つ以上を論理和 (OR) によって形成される、ロギングオプションを指定するビットフィールドです。
- LOG_CONS
- syslog() がメッセージを syslogd(8) へ渡せない場合、コンソール (“ /dev/console”) にメッセージを書き込むことを試みます。
- LOG_NDELAY
- 直ちに syslogd(8) への接続をオープンします。通常は、最初のメッセージがロギングされるまでオープンは遅れます。ファイル記述子を割り付ける順番を管理する必要があるプログラムで役に立ちます。
- LOG_PERROR
- メッセージを、システムログと同様に標準エラー出力にも書き込みます。
- LOG_PID
- 各メッセージとともにプロセス ID をロギングします。デーモンのインスタンス化 (例示化) を識別するのに役に立ちます。
facility 引数は、明示的なファシリティをエンコード (符号化) しないすべてのメッセージに割り当てるデフォルトファシリティをエンコードします。
- LOG_AUTH
- 権限付与システム。 login(1), su(1), getty(8)、など。
- LOG_AUTHPRIV
- LOG_AUTH と同じですが、選択された個人だけが判読可能なファイルにロギングします。
- LOG_CONSOLE
- カーネルコンソール出力ドライバによって、メッセージは /dev/console に書き込まれます。
- LOG_CRON
- cron デーモン。 cron(8)。
- LOG_DAEMON
- routed(8) のような、他のファシリティで明示的に提供されていないシステムデーモン。
- LOG_FTP
- ファイル転送プロトコルデーモン。 ftpd(8), tftpd(8)。
- LOG_KERN
- カーネルにより生成されるメッセージ。これらは、どんなユーザプロセスによっても生成することができません。
- LOG_LPR
- ラインプリンタのスプーリングシステム。 lpr(1), lpc(8), lpd(8)、など。
- LOG_MAIL
- メールシステム。
- LOG_NEWS
- ネットワークニュースシステム。
- LOG_NTP
- ネットワークタイム (時間) プロトコルシステム。
- LOG_SECURITY
- ipfw(4) のようなセキュリティサブシステム。
- LOG_SYSLOG
- syslogd(8) により内部に生成されたメッセージ。
- LOG_USER
- 任意のユーザプロセスにより生成されたメッセージ。何も指定されていない場合、これはデフォルトのファシリティ識別子です。
- LOG_UUCP
- uucp システム。
- LOG_LOCAL0
- ローカルの使用のために予約されています。 LOG_LOCAL1 から LOG_LOCAL7 までについても同様。
closelog() 関数は、ログファイルをクローズするために使うことができます。
setlogmask() 関数は、ログ優先順位マスクを maskpri に設定し、以前のマスクを返します。 maskpri に設定されていない優先順位を持った syslog() への呼び出しは拒絶されます。個別の優先順位 pri のためのマスクは、マクロ LOG_MASK( pri) によって計算されます。 toppri を含むまでのすべての優先順位についてのマスクは、マクロ LOG_UPTO( toppri) によって与えられます。デフォルトでは、すべての優先順位をログすることを許可します。
戻り値
ルーチン closelog(), openlog(), syslog()、および vsyslog() は、値を返しません。ルーチン setlogmask() は、常に前のログマスクレベルを返します。
例
syslog(LOG_ALERT, "who: internal error 23"); openlog("ftpd", LOG_PID | LOG_NDELAY, LOG_FTP); setlogmask(LOG_UPTO(LOG_ERR)); syslog(LOG_INFO, "Connection from host %d", CallingHost); syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
歴史
これらの関数は、 4.2BSD で登場しました。バグ
‘%s
’を使用しない形式としてユーザ供給されたデータで文字列を決して渡さないでください。起こり得るセキュリティホールに通じて、攻撃者は、利用者のスタックを台無しにするために文字列として形式記述子を入れることができます。文字列が
snprintf() のような関数を使用して造られたとしてもこれは有効で、結果の文字列は
syslog() によって後で挿入されるユーザ供給された変換記述子をまだ含むことができます。
常に適切で安全な表現形式を使用してください:
syslog("%s", string);
December 30, 2004 | FreeBSD |