Sys::Syslogを使ってロギング

PerlでSyslogへの出力を行いたい時は、Sys::Syslogを使うと簡単に出力できます。

出力先のファイルは/etc/syslog.confにて設定を行います。以下を追加しました。local6というファシリティを利用する前提。syslogはlocal0からlocal7まで自由に設定できるようになっているので6というのは適宜変更してください。

local6.*                    /var/log/{ログファイル名}

confを変更したときは、syslogdの再起動が必要です。

$ ps axuw | grep [s]yslogd
$ kill -HUP {syslogdのpid}

で再起動をします。

以下のようにログを出力します。

#!/usr/bin/perl
use Sys::Syslog qw(:DEFAULT setlogsock);

#Unixドメインソケットを通じて出力する
setlogsock 'unix';

#ログ出力元, 出力方式, ファシリティ
openlog(__FILE__, 'pid', 'local6');

#優先度, ログメッセージ
syslog('notice', 'message');

closelog();

syslog経由でログを出力しておくと、ネットワークを通じて他のサーバにログを送信するなどの設定が簡単にできるので便利ですね。