- ベストアンサー
ループ内でsyslog出力
いつもお世話になっております。 標題についてご教授願えないでしょうか。 今までfwrite等でファイルに出力していた内容を SYSLOGにて出力する事となりました。 その際、これまでfor(i=0; ・・・)等のループ内で ファイル出力して、ループを抜けたらfclose()としていた処理で、 同様の処理が出来るが教えて頂きたいです。 纏めと、ループ内のfwriteをsyslogに変更 openlogとcloselogはループ外
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ん~? 仕様を決めないことにはどうしようもないでしょう 複数のメッセージをまとめて出したいなら$messageをつなげてから処理すればいいし 一行ごとにヘッダ情報をつけたいならループすればいいし・・・ <?PHP openlog("myLog", LOG_PID | LOG_PERROR, LOG_LOCAL0); $access = date("Y/m/d H:i:s"); $message="test1"; syslog(LOG_INFO, "$message: $access {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})"); $message="test2"; syslog(LOG_INFO, "$message: $access {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})"); closelog(); ?> としてもいいし <?PHP openlog("myLog", LOG_PID | LOG_PERROR, LOG_LOCAL0); $access = date("Y/m/d H:i:s"); $message="test3\ntest4"; syslog(LOG_INFO, "$message: $access {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})"); closelog(); ?> でもいいということ 前者をループで処理するならopenlogとcloselogでループをはさめばいいし 後者ならopenlogとcloselogでループをはさんでもはさまなくても 出力するときに処理すればいいでしょう
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
あ、ごめんなさい CLIモードではなくPHPからsyslogを呼ぶんですね $messageはループで連結したデータを流すことになるでしょう $message=""; for($i=0;$i<$len;$i++){ if($message!=="") $message.="\n"; $message+='・・・'; } openlog("myLog", LOG_PID | LOG_PERROR, LOG_LOCAL0); $access = date("Y/m/d H:i:s"); syslog(LOG_NOTICE, "$message: $access {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})"); closelog(); みたいな感じ?
お礼
有難う御座います。 syslog自体よく分かっていないのですが、 ループ内で何度もopenlogとcloselogをするとメモリなど問題あるのでしょうか。 既存の処理でループ内で2つのファイルに書き出している場合、 closelogが引数を持っていないため、 何度もやらないといけない認識なんですが。 間違っていないでしょうか
- yambejp
- ベストアンサー率51% (3827/7415)
syslogを使うならloggerでメッセージを出力することになります (1)syslog.confに適切なタグを設定しておき (2)logger -t hoge $MESS で出力します
補足
回答有難う御座います。 よく分かっていなくてすみません。 上記は確認方法と言う事でしょうか。
お礼
ありがとうございました。 複数のファイルに出す場合は、 吐き出す内容を溜めていっぺんに出すようにしようと思います。