1

PDOを使用してデータベースエラーをログに記録したいのですが、catchブロックにログを繰り返し追加する必要はありません。PDOExceptionを強制的にログに記録する方法はありますか?

または、PDOを拡張するクラスを作成してから、PDOExceptionsを拡張するクラスを作成し、代わりにそれらを使用する必要があります。次のように:

try {
  $dbconn = new logPDO ( ... );
  //...
} catch (LogException $e ) {
  //..
}

これを回避するためだけに、新しいクラスを作成することは避けたいと思います。PDOExceptionをログに記録できないのは奇妙に思えます。

4

2 に答える 2

0

全体のセットアップは私には珍しいように見えます。
キャッチブロックにロギングを追加するのではなく、これらのブロックを数で追加する必要があります。

私の理解では、エラーを処理する一般的な方法は、すべてのジョブを実行する単一のアプリケーション全体の例外ハンドラーです。エラーを画面に表示するか、ログに記録して、503をブラウザーに送信します。PDOエラーだけでなく、エラーが発生した場合。私はすべてのエラーが非常に有用であり、平等に扱われるに値すると思います。

これを行うには、例外をスローするように独自のエラーハンドラーを設定し、エラーをログに記録するように例外ハンドラーを設定する必要があります。そして、アプリケーション全体に対してグローバルなtry-catchブロックを設定します。

アプリケーションがなくても存続できるこれらのいくつかの重要ではない部分については、内部にロガーを含むtry-catchブロックを使用することは可能ですが、繰り返しになりますが、なぜPDOのみであるのかわかりません-そのようなブロック全体をラップします、 PDOが発生しただけでなく、発生したすべてのエラーをログに記録します。したがって、いくつかの異なるタイプの例外(ロギングのみをトリガーし、catchでアプリケーションを停止しない)でうまくいく可能性があります。

于 2012-12-30T09:37:53.893 に答える
0

PDOException最も簡単な方法は、ロギング ロジックを実行する関数を作成することです。

function logPdo(PDOException $e) {
  // log stuff w/ the exception instance..
}

それもクラスの静的メソッドである可能性があります。ただし、よりオブジェクト指向のソリューションが必要な場合は、サブクラスPDO化してそれをキャッチしてから、メソッドなどを持つPDOExceptionサブクラスまたはカスタム Exception クラスをスローしlogます。これは適切なアプローチです。

于 2012-12-30T06:33:26.747 に答える