4

Adobe ColdFusionバージョン8以下を使用すると、すべてのcfqueriesは、「CatchError」と呼ばれるdatabase.cfcの関数を呼び出すtrycatchにラップされます。

<cftry>
   <cfquery datasource="myDatasource">
   UPDATE TableName SET
   ...
   WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.ID#">
   </cfquery>
   <cfcatch>
      <cfset local.result = Variables.objDatabase.CatchError(cfcatch)>
   </cfcatch>
</cftry>

Q1:さまざまな例外タイプ(Any、Application、Database、Expression、Lock、MissingInclude、Object、Security、Template、SearchEngine)をすべて考慮に入れて作成された、優れた汎用エラーキャッチャーはありますか?

Q2:これらのエラーも、テキストファイルではなくデータベースに記録したいと思っています。もちろん、これには問題があります...データベースにデータベースエラーを記録しています...

Q3:このセッションの最初のエラーの場合は、誰かにメールを送信したいと思うかもしれません。

4

2 に答える 2

2

あなたの質問は一般的なエラー処理に当てはまると思うので、言語に依存しない質問でいくつかの有用な答えを見つけることができます。

1. Soldarnalは質問1に回答しましたが、同意する傾向があります。データベースの相互作用など、エラーが発生する可能性のあるすべての場所をキャッチしようとするのは大変な作業です。すべてのエラーをキャッチしてtry/を使用するグローバルエラーハンドラーを用意することをお勧めします。エラーが発生する可能性が高く、実行を続行したい場所でキャッチします(通常、サイトがデータベースにアクセスできない場合は、少しスタックします)。

2.ロギングに関してcflogは、サーバーに重大な問題がない限り、ほとんどの場合ファイルにログオンできるため、最も堅牢です。cfmail次は次のとおりです。サーバーは、送信できないメールをキューに入れる必要がありますが、問題が発生する可能性は他にもあります。次にcfhttp、エラーを外部サイトに記録できますが、エラーが送信されたときに起動する必要があります。そうしないと、エラーが失われます。最後に、データベースにログインできますが、それでも問題が解決しない場合は、行き詰まります。

データベースが利用できない場合を除いて、データベースにエラーをログに記録するなどの組み合わせを使用できます。その後、ファイルにログを記録し、バックアップ時にエラーをデータベースに再挿入します。

3.データベースや外部サービスなどでエラーを追跡している場合は、最初のエラーでメールを送信するcfmailように、またはすべてのエラーでメールを送信できるように設定できるはずです。カスタムビルドのエラー処理スクリプトを使用しますが、Webのあちこちに浮かんでいる可能性があります。

于 2010-02-24T21:08:59.513 に答える
1

application.cfcのOnRequestStart関数で、次の行を追加できます。

<cferror type="EXCEPTION" exception="any" template="act-error.cfm">

通常、act-error.cfmで、未処理の例外(よりわかりやすい言語で)が発生したことを示すユーザーhtmlと、いくつかのわかりやすいリンクを表示します。また、act-errorの場合でも、エラー変数を含むすべての変数にアクセスして、必要な処理(ログ、電子メール、セッション変数の更新など)を実行できます。

明らかに、あなたが述べているように、元のエラーがデータベースがダウンしていることであった場合、データベースへのロギングは失敗します。ただし、気づかなかった場合は、ColdFusion管理者に例外ログがあり、そのような問題をログに記録できます。

編集-cferrorアプローチを使用する一般的なハンドラーは次のとおりです。http: //www.bennadel.com/blog/932-Ask-Ben-Handling-Errors-With-ColdFusion-CFError.htm

于 2010-02-23T00:05:19.893 に答える