SYSLOG(3)

名称
syslog, vsyslog, openlog, closelog, setlogmask - システムログの制御

ライブラリ
libc

書式
<syslog.h> <varargs.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_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 自体を含む 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 に現れました。