syslog

syslog.confをはじめていじってみた。

最初の作品。

/etc/syslog.conf

 *.info  /var/log/0317Log

priorityがLOG_INFO以上(=LOG_DEBUG以外)を、/var/log/0317Log に出力するという設定ファイル

左側の、*.info 部分を セレクターフィールド
右側をアクションフィールドと呼ぶらしい(manpageより。。)

セレクターフィールドは、
hoge.hoge のように、ピリオドでふたつに区切られる。

左側にfacility
右側にpriority を記述する。

今回の設定ファイルでは、 facilityは*としており、すべてのfacilityについて、の、info プライオリティ以上について、アクションを行う を意味している。
※単に、facilityが良くわかんなかっただけ(^^;


で、この設定ファイルをsyslogデーモンに読み直させる必要があるんだけど、
これまたやりかたがよくわからなかったから、

ps -ef | grep syslog*

で、syslogdのPIDをみっけて、

kill その番号

で、いっかい切ってから、また、/sbin/syslogdで再起動したら、なんとかうまくいってた。。。

syslog.conf

 *.info  /hoge/hoge

を、のみとすることで、info未満のpriority、すなわち、LOG_DEBUGは、syslogされないわけだけど、
syslog(LOG_DEBUG,"***");
自体が呼ばれないというわけではない。

int main(void){
        unsigned int i = 0;
        syslog(LOG_ERR,"ERR");
        for(i=0;i<1000000;i++){
        //      syslog(LOG_DEBUG,"DEBUG");
                syslog(LOG_ERR,"ERR");
        }
        return 0;
}

の実行結果が、

debian36:/home/play/0317# time ./a.out

real    0m10.244s
user    0m3.376s
sys     0m6.864s

int main(void){
        unsigned int i = 0;
        syslog(LOG_ERR,"ERR");
        for(i=0;i<1000000;i++){
                syslog(LOG_DEBUG,"DEBUG");
                syslog(LOG_ERR,"ERR");
        }
        return 0;
}

の実行結果が、

debian36:/home/play/0317# time ./a.out

real    0m25.071s
user    0m7.544s
sys     0m14.113s

なわけで、開発の進行度合によって、syslog.conf書き換えれば、ログ出力変え放題だぜぃ、
#ifdef DEBUG
なんていらないぜぃ
っていうのは、なし、、、っぽい。

なし、、、っぽい。

なし、、、なんだよね?

いくら出力されないからって、むだなsyslogをぽんぽん書いてたら、
処理的に重くなっちゃうんだよね?

そんなオモッタラシイコードを、製品に乗っけちゃうのはナシだよね・・・?