PHP でキャッチされなかった例外をログに記録するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/20322

質問

エラーを例外に変換する方法はわかりました。エラーが検出されなかった場合は適切に表示しますが、便利な方法でログに記録する方法がわかりません。ファイルに書き込むだけでは役に立ちませんね。また、例外の原因がまだわからないときに、データベースにアクセスする危険を冒しますか?

役に立ちましたか?

解決

本当に好きです log4php まだ孵卵器から出していないにもかかわらず、ログを記録するために。私はほぼすべてのことに log4net を使用していますが、このスタイルが私にとって非常に自然であると感じています。

システムクラッシュに関しては、エラーを複数の宛先に記録できます(たとえば、しきい値が CRITICAL または ERROR で、問題が発生した場合にのみ機能するアペンダーを設定します)。既存のアペンダーがどの程度フェイルセーフであるかはわかりません -- データベースがダウンした場合、そのアペンダーはどのように失敗するのでしょうか? -- しかし、ログを記録できない場合に正常に失敗する独自のアペンダーを非常に簡単に作成できます。

他のヒント

使用できます set_error_handler エラーをログに記録するためのカスタム例外を設定します。デフォルトの例外ハンドラーのバックトレースにより、その原因に関する情報が得られるため、個人的にはデータベースに保存することを検討します。ただし、データベース ハンドラーが例外をトリガーした場合、これはもちろん不可能です。

を使用することもできます エラーログ エラーをログに記録します。次のようなメッセージの宛先を選択できます。

より引用 エラーログ

  1. PHP のシステム ロガー。error_log 設定ディレクティブの設定に応じて、オペレーティング システムのシステム ロギング メカニズムまたはファイルを使用します。これはデフォルトのオプションです。
  2. 宛先パラメータのアドレスに電子メールで送信されます。これは、4 番目のパラメーター extra_headers が使用される唯一のメッセージ タイプです。
  3. ファイルの宛先に追加されます。メッセージ文字列の末尾に改行は自動的に追加されません。

編集:マークダウンにはアンダースコア用の noparse タグはありますか?

ファイルに書き込むだけでは役に立ちませんね。

しかし、もちろん、それは素晴らしいことです。画面に表示するよりもはるかに優れています。ユーザーに「ごめんなさい、ふざけてしまいました。」という素晴らしい画面を表示したいとします。エンジニアに通知されました。戻って再試行してください」と表示されますが、セキュリティ上のリスクがあるため、技術的な詳細はまったく記載されていません。共有メールボックスに電子メールを送信し、後で確認するために例外をファイルまたは DB に記録できます。これがベストプラクティスです。

私ならそれらをファイルに書き込み、ファイルサイズや最終更新日の変更をチェックする監視システムを設定するかもしれません。Webmin は簡単な方法の 1 つですが、より完全なソフトウェア ソリューションもあります。

1 回限りのエラーであることがわかっている場合は、通知を電子メールで送信しても問題ありません。ただし、1 分あたりのヒット数が多い Web サイトでは、 これまで 通知を電子メールで送信します。システムがデータベースに接続できなかったことを知らせるメールが毎分何百通も生成され、Web サイトがダウンしたのを見たことがあります。新しいメッセージごとにメールサーバーが実行されるため、LoadAvg が 200 を超えていたという事実も、まったく役に立ちませんでした。この場合、最良のシナリオは、断然、ウォッチドッグがファイル サイズをチェックし、外部サービスに接続して SMS (おそらく IM) を送信するか、外部システムに Web ページでエラー メッセージを検索させることでした (これは、画面上に表示される必要はありません。HTML コメント内に表示することもできます)。

エラーが発生した場所に大きく依存すると思います。DB がダウンしている場合、DB にログを記録するのは得策ではありません ;)

私が使用するのは、 syslog() エラーをログに記録する機能がありますが、syslog サポートがないシステムを使用している場合でも、エラーをファイルに書き込むのに問題はありません。たとえば、次のような方法を使用して、電子メールまたはジャバー メッセージを送信するようにシステムを簡単にセットアップできます。 ログウォッチ または 標準の syslogd.

2番目のlog4phpです。通常、例外などを ERROR または CRITITCAL に送信し、syslog に書き込むように構成しています。そこから、syslog をフィードすることができます。 ゼノス, ナギオス, スプランク または syslog が通信できるその他のもの。

Google フォームを使用して PHP 例外をキャッチして記録することもできます。チュートリアルがあります ここ それはプロセスを説明します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top