EN JA
SYSLOG(3)
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) のタグが付けられます。優先順位は、 facilitylevel にエンコード (符号化) されます。 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");

関連項目

logger(1), syslogd(8)

歴史

これらの関数は、 4.2BSD で登場しました。

バグ

%s’を使用しない形式としてユーザ供給されたデータで文字列を決して渡さないでください。起こり得るセキュリティホールに通じて、攻撃者は、利用者のスタックを台無しにするために文字列として形式記述子を入れることができます。文字列が snprintf() のような関数を使用して造られたとしてもこれは有効で、結果の文字列は syslog() によって後で挿入されるユーザ供給された変換記述子をまだ含むことができます。

常に適切で安全な表現形式を使用してください:

syslog("%s", string);
December 30, 2004 FreeBSD