我只是在coldbox应用程序中使用coldbox错误捕获。在OnException方法中,我只是发送错误结构来记录错误。
我在onexception方法中的代码
public function onException(event,rc,prc){
NewRelic.logError( prc.exception.getExceptionStruct());
}logerror()方法驻留在NewRelic.cfc中,并包含以下代码
public boolean function logError(
required struct exception
) {
var cause = arguments.exception;
var params = {
error_id = createUUID(),
type: arguments.exception.type,
message: arguments.exception.message
};
writeDump(this.newRelic);
this.newRelic.noticeError(cause, params);abort;
return true;
}因此,在出错的同时,我得到了以下错误。
没有找到noticeError方法。

您可以看到,noticeError()方法存在于对象中,但是它重载了参数。
我正在使用相同的代码来捕获另一个没有任何框架的coldfusion项目中的NewRelic错误。
通过error.cfm标记调用Cferror,error.cfm中的代码如下所示
<cfset Application.newRelic.logError( variables.error )>在NewRelic.cfc中,logerror()方法包含与coldbox应用程序相同的代码。,但是它在NewRelic中记录错误,没有任何问题.
这是我需要注意的错误并将其记录在NewRelic中的方法。
noticeError(java.lang.Throwable,java.util.Map)
因此,我只想从Cause中的logError()中的两个应用程序中获得第一个参数NewRelic.cfc的类名,以获得区别。
writeDump(cause.getClass().getName());我得到了
用于冷盒应用的coldfusion.runtime.ExceptionScope和用于普通冷融合应用的coldfusion.runtime.UndefinedVariableException
cause参数不能从coldbox应用程序中抛出。那么,如何从coldbox应用程序中获得原始错误结构呢?并使它能够修复noticeError method was not found问题。
发布于 2015-10-05 20:26:03
当ColdBox用CFML的duplicate()方法复制错误对象时,底层类中的更改就会发生。我怀疑ColdFusion行为是否在任何地方都有文档记录,但除了创建您自己的java.langException实例并将原始错误的细节填充到它之外,我现在找不到一种简单的方法来绕过它。
如果您想修改ColdBox核心代码,这会发生在这里:https://github.com/ColdBox/coldbox-platform/blob/master/system/web/context/ExceptionBean.cfc#L43
我已经为ColdBox框架输入了这张票据,以检查是否可以停止在该框架的未来版本中重复错误对象。
https://ortussolutions.atlassian.net/browse/COLDBOX-476
更新: Adam Cameron在Adobe跟踪器中指出了这张票证,详细说明了引擎中的这种行为。它被关闭为"neverFix“。
https://stackoverflow.com/questions/32944597
复制相似问题