質問 > 管理機能 > ログローテーション処理について |
管理機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
seasoft |
投稿日時: 2010/9/17 23:15
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: ログローテーション処理について > そういえばlog4phpにするなんて話ありませんでしたっけ・・・?
> 任せちゃえばローテートも楽そうなんですが 私も今回の件で log4php は考えました。 しかし、ちょっとやりたいことに対して規模が大きいかなぁと思ったりも。 まぁ、EC-CUBE 全体の処理からしたら、些細な負荷のような気もするので、色々と独自で考えるよりもサクッと切り替えてしまうのもアリかもしれませんね。 nanasess 様のご指摘のように、課題はあるようですが・・・
|
patapata |
投稿日時: 2010/9/17 22:14
対応状況: −−−
|
仙人 登録日: 2010/7/7 居住地: 神奈川県 投稿: 502 |
Re: ログローテーション処理について 追加情報:
原因がなんとなくわかりました。 file_exists や filesize はどうやらキャッシュが残るらしく clearstatcache(); で消さないと駄目なようです。 現象が発生しない方は、おそらくPHPのバージョンの違いかと思われます。 PHP Ver5.1.6をご使用の方がおりましたら、logファイルの状態をご報告してくれると助かります。 また以下のように入れてみたところ、ファイルが消えることはなくなりましたが・・・filesizeでワーニングを吐くようになりました。 あとちょっとっぽい。 ---現状コード------------- function gfLogRotation($max_log, $max_size, $path) { // ファイルが最大サイズを超えていない場合、終了 clearstatcache(); if (filesize($path) <= $max_size) return; // アーカイブのインクリメント(削除を兼ねる) for ($i = $max_log; $i >= 2; $i--) { $path_old = "$path." . ($i - 1); $path_new = "$path.$i"; if (file_exists($path_old)) { clearstatcache(); rename($path_old, $path_new); } } // 現在ファイルのアーカイブ rename($path, "$path.1"); } |
patapata |
投稿日時: 2010/9/17 20:49
対応状況: −−−
|
仙人 登録日: 2010/7/7 居住地: 神奈川県 投稿: 502 |
Re: ログローテーション処理について すみません。調査難航していまして・・・
とりあえずご報告だけ。 未カスタマイズ状態のeccube2.4.4で、現象を確認いたしました。 また頻度といたしましては、ログローテーション時必ずおきますね。 最悪site.log自体がなくなってしまい、その後のログが一切収集されなくなってしまいます。 なにか心当たりがある方おりましたら、お助けくださいませ。 また私も〜とかいう方がおりましたら、いっしょに考えましょ。 正直時間が迫られておりまして、きっつきつです。 ---環境---- EC-CUBE 2.4.4 OS Linux DBサーバ MySQL 5.0.77 WEBサーバ Apache PHP 5.1.6 |
nanasess |
投稿日時: 2010/9/17 20:20
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: ログローテーション処理について 引用:
yokkuns 様からのご提供で, コードはコミットされています http://svn.ec-cube.net/open_trac/ticket/149 現状では, ログを吐く場所を log4php.properties で設定しなければならないので, これを data/logs 以下に自動設定するには, どうしたら良いかなぁ... というところで止まってます(汗) あと, 関数名も gfXXX とかではなくて, $logger->info() とかでアクセスできるようにしたいです. |
AMUAMU |
投稿日時: 2010/9/17 19:37
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: ログローテーション処理について 私も、頻度が低かったりや欠番発生程度であれば対処は後でも良いかなとは思います。
そういえばlog4phpにするなんて話ありませんでしたっけ・・・? 任せちゃえばローテートも楽そうなんですが
|
seasoft |
投稿日時: 2010/9/17 18:16
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: ログローテーション処理について > >しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・
> > いくつかありそうですが使用頻度との兼ね合いでしょうかね? > なかなか難しい所です。 patapata 様の環境でエラーが発現するという事実があるので、その原因がマルチスレッドに依存するものなのか、非マルチスレッドでも発現する性質のものなのかなどを切り分けていきたいですね。 今のところ、個人的には PHP をマルチスレッドで実運用に回した事が無いのですが、EC-CUBE がマルチスレッドである程度使いものになるならば、それはそれで興味深いですし、今後の実装にあたってマルチスレッドを意識する事も必要かなと思います。 そういった意味では、patapata 様以外でも、マルチスレッド環境での動作状況を把握されている方がいらっしゃいましたら、情報をいただきたいですね。 なお、http://svn.ec-cube.net/open_trac/ticket/746 につきましては、2.4 系のチケットであり、このチケット内でマルチスレッド対応を行なうのは困難だと考えまして、クローズさせていただきました。このスレッドでの状況進行に応じて、2.5系として、新チケットで対応するのが良いのではないかと考えています。 Windows の rename 関数の問題は、2.4系で現存する不具合ではありますが、2.4.5 がリリースされるかも分からないので、2.5系のチケットとして、別途チケットを発行し、改修してみました。 http://svn.ec-cube.net/open_trac/ticket/809 http://svn.ec-cube.net/open_trac/changeset/18805 また、http://svn.ec-cube.net/open_trac/ticket/746#comment:6 にも記載しましたが非マルチスレッドでも現実装では、何らかの不具合は発生しうるとは思っています。それが、アーカイブの中間が消失するようなものが頻発するであれば早急に対処が必要だと思います。しかし、欠番が発生して、実質的には一番古いログが早い時期に紛失する程度の不具合ならば、対処は少し後でも良いのかなとも思います。
|
nanasess |
投稿日時: 2010/9/16 9:35
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: ログローテーション処理について >マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。
EC-CUBE に限らず, 同梱している PEAR パッケージもマルチスレッドは意識してない可能性があります. PHP の Windows用バイナリはスレッドサポート付きのものが配布されていますし, 顕著化するようでしたら, EC-CUBE のみの問題では収まらないかもしれません. |
AMUAMU |
投稿日時: 2010/9/16 3:18
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: ログローテーション処理について >しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・
いくつかありそうですが使用頻度との兼ね合いでしょうかね? なかなか難しい所です。 >マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。 DB周りのロック処理なども含めて、ここらへんを中心にスケーリングした利用方法に対応させるのは中々大変なので優先順位は正直低いかもしれませんね・・・ (環境依存させれば比較的楽で、よくカスタマイズしていますが、幅広く動かすとは正反対の使い方でフィードバックがなかなか難しい・・・
|
seasoft |
投稿日時: 2010/9/16 3:06
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: ログローテーション処理について patapata 様の冒頭の環境情報からしますと、(今回は)1点目は排除できそうですので、「suPHP」と「高速化モジュール」と「CGI」といった辺りが気になるところですね。
> また、スレッドセーフで無い問題はCGIモードでPHPが動いていると発生しやすいかと。 スレッドセーフと聞いて MPM Worker での運用あたりを推測していましたが、なるほど、CGI ですか。CGI でマルチスレッドとは思いつきませんでした。 しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・ マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。
|
AMUAMU |
投稿日時: 2010/9/16 2:23
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: ログローテーション処理について >> ・私が気付いたのは、renameでのファイル上書きは環境・設定依存する。
> >「設定」というのは、上記環境でも関与ありそうな部分はありますか? patapataさんの環境に関する情報だけでは不明ですが、私が知っているrename関数の環境依存、設定依存は ・Windows上のPHPではrenameで既にファイルが存在する場合は、ファイル上書きをしない挙動だったと記憶しています(以前はまったことが・・・)。環境依存、たぶん一番問題。 ・suPHP下では、既にファイルが存在する場合rename関数での上書きをしなかった記憶があり、環境・設定依存の可能性あり。 ・サポート外かと思いますがキャッシュ高速化系(eAccelarator等)では上書きの挙動が変わったような気がします。 また、スレッドセーフで無い問題はCGIモードでPHPが動いていると発生しやすいかと。
|
« 1 (2) 3 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |