SYSLOG(3)

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

形式
#include <syslog.h>

openlog(ident, logopt, facility)
char *ident;

syslog(priority, message, parameters ... )
int priority;
char *message;

#include <varargs.h>
vsyslog(priority, message, args)
int priority;
char *message;
va_list args;

closelog()

setlogmask(maskpri)

機能説明
syslog は syslogd(8) により管理されるシステムログへの message の出力を扱います。 message は priority によりタグが付けられます。 message は printf(3) 形式の文字列と同じですが、 %m だけはその時点での( errno に相当する)エラーメッセージに置き換えられます。 必要ならば、文末の改行が追加されます。 もう一つの形式として、 varargs(3) の機能の可変長引数を使用するようなものも vsyslog で使用することができます。

message は syslogd(8) により読み込まれ、適宜システムコンソール、ログファイルあるいは他のホストの syslogd へフォワードされ出力されます。

priority は facility と level の組のデータとして作成されます。 facility はメッセージを生成するシステムの名称を表します。 level は次のとおりです。

LOG_ALERT
    システムデータベースの破壊のような早急に修復しなければいけない状態です。

LOG_CRIT
    デバイスエラーのような致命的な状態です。

LOG_DEBUG
    プログラムのデバッグ時にのみ通常使用される情報で構成されるメッセージです。

LOG_EMERG
    パニックした状態です。 これは通常すべてのユーザに知らされます。

LOG_ERR
    エラー状態です。

LOG_INFO
    情報のみのメッセージです。

LOG_NOTICE
    エラー状態ではないですが、可能ならば特別に処理すべき状態です。

LOG_WARNING
    警告メッセージです。

syslog が message を syslogd に渡すことができない場合、LOG_CONS オプション(以下を参照)が指定されていれば、 コンソール(``/dev/console'')にその message を出力します。

特別な処理が必要な場合、ログファイルを初期化するために openlog を呼ぶことができます。 ident という引数は各 message の前に追加される文字列です。 logopt はログのオプションを示すビットフィールドです。 logopt として現在使用できるものはつぎのとおりです。

LOG_CONS
    syslogd に message を送ることができなければ、コンソールに出力します。

LOG_NDELAY
    syslogd へのコネクションをすぐに張ります。 通常は最初の message が出力されるまでコネクションは張りません。 これは、ファイルディスクリプタを割り当てた順序を管理する必要があるプログラムでは有用です。

LOG_PERROR
    システムログとともに標準エラー出力へも message を出力します。

LOG_PID
    各 message にプロセス ID も出力します。 これは、実行中のデーモンの識別に有用です。

facility という引数は名称を明示的に指定していないすべてのメッセージに付けられるデフォルトの名称で、 つぎのうちのいずれかです。

LOG_AUTH
    login(1) 、 su(1) 、 getty(8) 等の認証システムです。

LOG_CRON
    クロックデーモンです。

LOG_DAEMON
    ftpd(8) 、 routed(8) 等のように明示的に他の名称では使用されないシステムデーモンです。

LOG_KERN
    カーネルで生成される message です。 これはユーザプロセスでは生成できません。

LOG_LPR
    lpr(1) 、 lpc(8) 、 lpd(8) 等のラインプリンタのスプールシステムです。

LOG_MAIL
    メールシステムです。

LOG_NEWS
    NetNews システムです。

LOG_SYSLOG
    syslogd(8) 内部で生成される message です。

LOG_USER
    任意のユーザプロセスにより生成される message です。 何も指定されなければこれがデフォルトの名称になります。

LOG_UUCP
    UUCP システムです。

LOG_LOCAL0
    ローカルな使用のためにリザーブされています。 同様に LOG_LOCAL1 から LOG_LOCAL7 まであります。

closelog はログファイルをクローズするために使用することができます。

setlogmask はログの priority マスクを maskpri に設定し、戻り値はそれまでのマスクを返します。 maskpri に priority を指定せずに syslog を呼ぶとエラーになります。 各 priority である pri のマスクは LOG_MASK(pri) というマクロにより求められます。 toppri を含むすべての priority のマスクは LOG_UPTO(toppri) というマクロにより求められます。 デフォルトではすべての priority がログに出力されます。

使用例
syslog(LOG_ALERT, "who: internal error 23");
openlog("ftpd", LOG_PID, LOG_DAEMON);
setlogmask(LOG_UPTO(LOG_ERR));
syslog(LOG_INFO, "Connection from host %d", CallingHost);
syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");

履歴
日本語訳は kondou@uxd.fc.nec.co.jp によって行われました。

関連項目
logger(1)、 syslogd(8)