ほとんどの本番サイトでは、エラーがいつ発生したかをできるだけ早く知りたいと考えています。私の質問は、この情報を取得する最善の方法です。
通常、エラーが発生するまで毎日座ってエラー ログを監視するわけではないため、エラーを電子メールで受け取るのがおそらく最善の方法です。異なるサーバーに 20 以上の運用サイトがあるため、これは不可能です。これらのエラーは、未設定の変数、無効なデータの受信、クエリ エラーなど、あらゆるものである可能性があります。
現時点では、ここにある PHP の Web サイトの例に従っています。その結果、電子メールで送信される XML ファイルと共にテキスト文字列が作成されます。これを少し変更して、スクリプトが終了するまですべてのエラーを保持し、XML ファイルを添付して電子メールを送信します。(ループ内のエラーが原因で、500,000 件以上の電子メールを送信するいくつかのメール サーバーがクラッシュしました。) ほとんどの場合、これは完全に機能します。(すべてのエラー処理を行うオブジェクトも作成しました。)
この問題は、プロセスに大量のデータがある場合に発生しwddx_serialize_value()
ます。そして、複数のエラーが発生した場合、多くの場合、スクリプトが使用できるよりも多くのメモリを実際に使用することになります。
gzcompress()
このため、変数内に格納する前に XML ファイルに追加を行いました。これは役に立ちますが、データ量が非常に多い場合は、依然としてメモリ不足になります。(最近のケースでは、約 2GB を使用したいと考えていました。)
これには他にどのような解決策があるのか 、それを機能させるためにこれをどのように変更したのか疑問に思っていますか?
したがって、いくつかの要件:
- エラーメッセージ以上のものを私に送信できる必要があり、サーバーにログインして何が起こったのかを把握する必要はありません(したがって、いつモバイルであるかを確認し、緊急の問題であるかどうかを判断できます)
- 送信されるメールの数に制限が必要です。最高はまだ1です。
- 通常どおりファイルにログを記録する必要があります
編集:エラー文字列だけでなく、エラーに関連する他の情報が必要です。多くの場合、エラーを再現することはほとんど不可能であることがわかります。これは、より多くの情報を取得しない限り、ユーザー入力が原因であることがわかりません。有益なエラーを入力するために最善を尽くしましたが、ユーザーがシステムをどのように使用するか、またはどのようながらくたデータを入力するかはわかりません。したがって、エラーテキスト/文字列だけでは不十分です。
編集2:データベースにエラーを記録できません。データベースが存在しない可能性があることがわかっているためです。実行がほぼ保証されているものが必要です。また、ウェブサイトはすべて1つのサーバー上にあるわけではなく、サーバー上のcronにアクセスできないことがよくあります(愚かなホスティング会社)。