2010-02-22 4 views
4

Adobe ColdFusion 버전 8 이하를 사용하면 모든 cfqueries가 "catchError"라는 database.cfc의 함수를 호출하는 try catch에 래핑됩니다.일반적인 범용 try/catch 루틴

<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 : 고려 작성된 것 좋은 범용 오류 포수는 거기에 모든 다른 예외 유형 (모든 응용 프로그램, 데이터베이스, 표현, 잠금, MissingInclude, 객체, 보안, 템플릿 및 SEARCHENGINE) ?

질문 2 : 나는 이러한 오류도 기록하고 싶지만 텍스트 파일이 아니라 데이터베이스에 기록하려고합니다. 물론 데이터베이스에 데이터베이스 오류를 기록하는 문제가 있습니다 ...

질문 3 :이 세션의 첫 번째 오류 인 경우 누군가에게 이메일을 보내고 싶을 수 있습니다. 당신의 application.cfc에서

답변

2

내가 당신의 질문은 일반적으로 오류 처리에 적용 생각, 그래서 당신은 언어에 독립적 질문에 몇 가지 유용한 답을 찾을 수 있습니다 : -

편집 여기의 cferror 접근 방식을 사용하여 일반 핸들러입니다.

1. Soldanal은 질문 1에 답변했으며 동의하는 경향이 있습니다. 데이터베이스 상호 작용과 같은 오류가 발생할 수있는 모든 위치를 잡아 내고 모든 오류를 포착하는 글로벌 오류 처리기를 사용하는 것이 좋습니다 try/catch를 사용하여 오류가 발생할 확률이 높고 실행을 계속하려는 경우 (일반적으로 사이트가 데이터베이스에 액세스 할 수없는 경우 조금 꼼짝하지 마십시오).

2. 로깅과 관련하여 서버에 심각한 문제가없는 한 거의 항상 파일에 기록 할 수 있으므로 가장 강력한 것은 cflog입니다. cfmail은 다음 단계입니다. 서버는 보낼 수없는 모든 메일을 대기열에 추가해야합니다. 다음은 cfhttp입니다. 오류를 외부 사이트에 기록 할 수는 있지만 오류가 전송되거나 잃어 버릴 때까지 기다려야합니다. 마지막으로 데이터베이스에 로그인 할 수 있지만 다시 로그인하면 다시 로그인 할 수 있습니다.

예 : 데이터베이스를 사용할 수없는 경우를 제외하고는 데이터베이스에 오류를 기록한 다음 파일에 로그하고 백업 할 때 데이터베이스에 오류를 다시 삽입하십시오.

3. 오류를 추적하는 중입니다. 데이터베이스 또는 외부 서비스를 통해 첫 번째 오류시 전자 메일을 보내도록 구성하거나 cfmail을 사용하여 모든 오류를 메일로 보낼 수 있어야합니다. 사용자 정의 오류 처리 스크립트를 사용하지만 웹 주위에 약간의 오류가있을 수 있습니다.

1

의 OnRequestStart 기능, 당신은이 라인을 추가 할 수 있습니다 : 행위 - error.cfm에 일반적으로

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

당신은 그들이 처리되지 않은 예외가 발생했습니다 나타내는 사용자 HTML을 표시 할을 (보다 친숙한 언어로) 친숙한 링크가 있습니다. 또한, 행동 오류에 대한 오류 변수를 포함하여 모든 변수에 액세스 할 수 있습니다 (로그, 전자 메일, 세션 변수 업데이트 등 ...).

원래 상태로 데이터베이스가 다운 된 경우 데이터베이스 로깅이 실패합니다. 하지만 사용자가 알지 못하는 경우 ColdFusion 관리자에게 예외 로그가 있으므로 이러한 문제를 기록 할 수 있습니다. http://www.bennadel.com/blog/932-Ask-Ben-Handling-Errors-With-ColdFusion-CFError.htm

+2

application.cfc를 사용하는 경우 cferror가 아닌 onError (http://livedocs.adobe.com/coldfusion/8/htmldocs/AppEvents_06.html#1188543)를 사용해야합니다.그렇지 않으면 못을 박는 드라이버를 사용하는 것과 같습니다. 제대로 작동하지만 도구를 잘못 사용하고있는 것입니다. –

+1

나는 왜 OnError가 더 나은지 궁금하다. 내 application.cfc에서 html 출력하는 것을 좋아하지 않기 때문에 사용하지 않는 것이 좋습니다. – Soldarnal

+4

그 자체로 "더 나은"것은 아니지만, application.cfc 프레임 워크와 관련된 오류 처리 메커니즘입니다. occam의 면도날에서의 운동이라고 생각하십시오. 가장 간단한 설명이 일반적으로 가장 좋습니다. 발굽이 들리면 "얼룩말"이 아니라 "말"이라고 생각할 것입니다. 다른 개발자가 application.cfc를 본다면 "cferror"가 아니라 "onError"라고 생각할 것입니다. onError 메서드는 또한 실제로 유비쿼터스가되는 이점이 있습니다. cferror 호출이 처리되지 않기 전에 발생하는 오류입니다. by를 사용하면 원하는 경우 onError 핸들러 본문에서 cfinclude를 쉽게 사용할 수 있습니다. –