我目前正在尝试通过在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。有什么建议吗?
答案 0 :(得分:1)
您还可以在ColdFusion管理员中定义整体ColdFusion错误处理程序。在服务器设置&gt;下设置,向下滚动到底部并设置“站点范围错误处理程序”选项。
中查看此内容答案 1 :(得分: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>