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をぽんぽん書いてたら、
処理的に重くなっちゃうんだよね?
そんなオモッタラシイコードを、製品に乗っけちゃうのはナシだよね・・・?