2

現在、Application.cfcに次のコードを含めることで、アプリケーションのすべてのエラーをキャプチャしようとしています。

<cffunction name="onError">
    <!--- The onError method gets two arguments: 
            An exception structure, which is identical to a cfcatch variable. 
            The name of the Application.cfc method, if any, in which the error 
            happened. --->
    <cfargument name="Except" required=true/>
    <cfargument type="String" name = "EventName" required=true/>
    <!--- Log all errors in an application-specific log file. --->
    <cflog file="#THIS.NAME#" type="error" text="Event Name: #Eventname#" >
    <cflog file="#THIS.NAME#" type="error" text="Message: #Except.message#">
    <!--- Throw validation errors to ColdFusion for handling. --->
    <cfif Find("coldfusion.filter.FormValidationException", Arguments.Except.StackTrace)>
        <cfthrow object="#Except#">
        <cfelse>
        <cfoutput>
        <h1>#Eventname#</h1>
        </cfoutput>
        <cfdump var="#Except#">
    </cfif>
</cffunction>

その一部は、私が見た他の例から借用しています(私は完全には理解していません)。最終的には、ある種の適切なエラーページを表示して、ユーザーからのフィードバックを求め、エラーをログに記録/電子メールで送信したいと思います。これは多くのエラーをキャッチするようですが、すべてではありません。必要がなければ、どこでもtry/catchを使いたくありません。助言がありますか?

4

3 に答える 3

1

また、ColdFusion管理者で定義できる全体的なColdFusionエラーハンドラもあります。[サーバー設定]>[設定]で、一番下までスクロールし、[サイト全体のエラーハンドラー]のオプションを設定します。

ドキュメントでもこれを確認してください。ColdFusionでのエラー処理について

于 2012-09-18T20:28:50.270 に答える
0

共有ホスティングの使用は問題ではないはずです。エラーテンプレートが何であるかをhosrに尋ねてください。それらがcfについて手がかりになっている場合は、セットアップされます。すべての顧客サイトのルートにあるerror.cfmと404.cfmの例を使用します。

于 2012-09-18T22:00:45.023 に答える
0

Application.cfc内の「OnError」メソッドは、ユーザー定義のtry/catchステートメントによって以前にキャッチされていないエラーのみをキャッチします。

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=appFramework_13.html

そうは言っても、必要に応じてコード内でcatchステートメントを試してみるのは良い考えだと思います(正常に劣化できない状況)。私がやりたいのは、すべての例外処理をラップするcfcをインスタンス化することです。このcfcには、実際のエラー処理ロジックを含めることができ、OnErrorメソッドが実行する必要があるのは、正しいコンポーネントをインスタンス化してエラーを「制御」することだけです。

非常に簡単な図:

<cfscript>

  /** Application.cfc **/
  public function onError(required exception, required string eventName)
  {
    var factory = new App.ExceptionFactory();
    var e = factory.getNewException(arguments.eventName, arguments.exception);

    if (e.logError()) {
      /** we cauld also have a logging cfc etc **/
      var loggingFile = new App.SomeLoggingCfc(arguments.eventName, arguments.exception);
      loggingFile.commitLog();
    }
    if (e.debugError()) {
      // show developer info here
    }

    /** Throw the exception **/
    e.throwException();
  } 

  /** App.ExceptionFactory **/
  public ExceptionFactory function getNewException(required string eventName, required exception)
  {
    return new "App.#exception.type#"(argumentCollection = arguments);
  } 

  /** App.Exception.CustomException **/
  public boolean function logError()
  {
    /** log the error **/
  }
  public boolean function debugError() {}

  public function throwException()
  {
    /** do what you want here **/
  }

</cfscript>
于 2012-09-18T23:31:31.207 に答える