PHPでのlogging(Solaris)

ref id:drambuie:20040120

単純に実行するとerror_logよりlog4phpの方が速かったのだけど、問題が発生。1行6000バイトのログをファイルに出力する処理を1000回繰り返すPHPスクリプトを作成して、OpenSTAで200VUぐらい負荷をかけてみた。すると一行が6000バイトでなく途中で切れてしまっている行があった。

  • error_log

PHP標準のerror_log()関数でも同様のことをやった。すると行が途中で切れるということはないが、1000回ループしているのに全部ファイルに出力されない。(ログファイルの行数が1000の倍数にならない。)
スクリプトで1000回ループするのを止めると、問題なし。Apacheaccess_logの行数とerror_logでのログの行数がちゃんと一致した。


log4phpのソースを見るとfopen,fseek,fwriteと来て、一連のログ出力処理が完了するまではfwriteを繰り返していて、毎回fcloseはしていないようだ。error_logでは一行出力するごとにopen/write/closeしているように見える。この辺に違いがあるのだろうか?