• ベストアンサー

ループ内でsyslog出力

いつもお世話になっております。 標題についてご教授願えないでしょうか。 今までfwrite等でファイルに出力していた内容を SYSLOGにて出力する事となりました。 その際、これまでfor(i=0; ・・・)等のループ内で ファイル出力して、ループを抜けたらfclose()としていた処理で、 同様の処理が出来るが教えて頂きたいです。 纏めと、ループ内のfwriteをsyslogに変更 openlogとcloselogはループ外

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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でループをはさんでもはさまなくても 出力するときに処理すればいいでしょう

prr4e
質問者

お礼

ありがとうございました。 複数のファイルに出す場合は、 吐き出す内容を溜めていっぺんに出すようにしようと思います。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

あ、ごめんなさい 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(); みたいな感じ?

prr4e
質問者

お礼

有難う御座います。 syslog自体よく分かっていないのですが、 ループ内で何度もopenlogとcloselogをするとメモリなど問題あるのでしょうか。 既存の処理でループ内で2つのファイルに書き出している場合、 closelogが引数を持っていないため、 何度もやらないといけない認識なんですが。 間違っていないでしょうか

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

syslogを使うならloggerでメッセージを出力することになります (1)syslog.confに適切なタグを設定しておき (2)logger -t hoge $MESS で出力します

prr4e
質問者

補足

回答有難う御座います。 よく分かっていなくてすみません。 上記は確認方法と言う事でしょうか。

関連するQ&A