一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

syslogでログ出力するのは簡単

自分でプログラムを書く時に、今まではデバッグメッセージなんかをprintf()でコンソールに出力していました。ですが単にprintf()に出力するよりも、既製品のsyslogを使ってみる方がsyslogの色んな機能のお世話になれるので便利だったりします。

プログラム中からsyslog経由でログを出力するのはさして難しくなかったりします。http://www.linux.or.jp/JM/html/LDP_man-pages/man3/syslog.3.htmlを読んでもすぐに使えるレベルの簡単さですが、ちょっと自分用も兼ねて書いてみます。

  1. openlog()でログを開く
  2. syslog()かvsyslog()でログを出力(printfフォーマットが使える)
  3. 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あたりを使い分けるとよさそうです。