自分でプログラムを書く時に、今まではデバッグメッセージなんかをprintf()でコンソールに出力していました。ですが単にprintf()に出力するよりも、既製品のsyslogを使ってみる方がsyslogの色んな機能のお世話になれるので便利だったりします。
プログラム中からsyslog経由でログを出力するのはさして難しくなかったりします。http://www.linux.or.jp/JM/html/LDP_man-pages/man3/syslog.3.htmlを読んでもすぐに使えるレベルの簡単さですが、ちょっと自分用も兼ねて書いてみます。
- openlog()でログを開く
- syslog()かvsyslog()でログを出力(printfフォーマットが使える)
- closelog()でログを閉じる
ね、簡単でしょ?
openlog(), closelog()
openlog()とcloselog()は次のように宣言されています。ちなみに、openlog()とcloselog()を呼び出さなくてもログの出力は出来ます。
void openlog(const char *ident, int option, int facility); void closelog(void);
identはログの行の冒頭に出力される文字列で、プログラムの識別子なんかを指定します。
optionには、ログの出力のされ方を指定します。LOG_CONSを指定するとコンソールにも出力してくれますが、必要なければ0を指定しておけば大丈夫です。
facilityには、普通のプログラムの場合LOG_USERを指定しておけば良いと思います。
syslog(), vsyslog()
ログを出力するsyslog()は次のように宣言されています。
void syslog(int priority, const char *format, ...); void vsyslog(int priority, const char *format, va_list ap);
vsyslog()は、可変長引数を自分で処理したい人向けです。普通はsyslog()を使います。
priorityにLOG_で始まる、ログメッセージの優先度を指定します。LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUGあたりを使い分けるとよさそうです。