バージョン選択

フォーラム

メニュー

オンライン状況

44 人のユーザが現在オンラインです。 (39 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 44
もっと...

サイト内検索

質問 > 管理機能 > ログローテーション処理について

管理機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
seasoft
投稿日時: 2010/9/17 23:15
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: ログローテーション処理について
> そういえばlog4phpにするなんて話ありませんでしたっけ・・・?
> 任せちゃえばローテートも楽そうなんですが

私も今回の件で log4php は考えました。
しかし、ちょっとやりたいことに対して規模が大きいかなぁと思ったりも。

まぁ、EC-CUBE 全体の処理からしたら、些細な負荷のような気もするので、色々と独自で考えるよりもサクッと切り替えてしまうのもアリかもしれませんね。

nanasess 様のご指摘のように、課題はあるようですが・・・


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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: ログローテーション処理について
引用:

AMUAMUさんは書きました:

そういえばlog4phpにするなんて話ありませんでしたっけ・・・?
任せちゃえばローテートも楽そうなんですが


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にするなんて話ありませんでしたっけ・・・?
任せちゃえばローテートも楽そうなんですが


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

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 にも記載しましたが非マルチスレッドでも現実装では、何らかの不具合は発生しうるとは思っています。それが、アーカイブの中間が消失するようなものが頻発するであれば早急に対処が必要だと思います。しかし、欠番が発生して、実質的には一番古いログが早い時期に紛失する程度の不具合ならば、対処は少し後でも良いのかなとも思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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周りのロック処理なども含めて、ここらへんを中心にスケーリングした利用方法に対応させるのは中々大変なので優先順位は正直低いかもしれませんね・・・
(環境依存させれば比較的楽で、よくカスタマイズしていますが、幅広く動かすとは正反対の使い方でフィードバックがなかなか難しい・・・


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

seasoft
投稿日時: 2010/9/16 3:06
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: ログローテーション処理について
patapata 様の冒頭の環境情報からしますと、(今回は)1点目は排除できそうですので、「suPHP」と「高速化モジュール」と「CGI」といった辺りが気になるところですね。


> また、スレッドセーフで無い問題はCGIモードでPHPが動いていると発生しやすいかと。

スレッドセーフと聞いて MPM Worker での運用あたりを推測していましたが、なるほど、CGI ですか。CGI でマルチスレッドとは思いつきませんでした。

しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・
マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

AMUAMU
投稿日時: 2010/9/16 2:23
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
>> ・私が気付いたのは、renameでのファイル上書きは環境・設定依存する。

>「設定」というのは、上記環境でも関与ありそうな部分はありますか?

patapataさんの環境に関する情報だけでは不明ですが、私が知っているrename関数の環境依存、設定依存は

・Windows上のPHPではrenameで既にファイルが存在する場合は、ファイル上書きをしない挙動だったと記憶しています(以前はまったことが・・・)。環境依存、たぶん一番問題。
・suPHP下では、既にファイルが存在する場合rename関数での上書きをしなかった記憶があり、環境・設定依存の可能性あり。
・サポート外かと思いますがキャッシュ高速化系(eAccelarator等)では上書きの挙動が変わったような気がします。

また、スレッドセーフで無い問題はCGIモードでPHPが動いていると発生しやすいかと。


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

« 1 (2) 3 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,116名です
総投稿数は110,039件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1649
8
red
1570
9
mcontact
1298
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.