未找到 noticeError 方法。使用 Coldbox 和 NewRelic 进行错误跟踪
The noticeError method was not found. while using Coldbox and NewRelic for Error tracking
我正在为我的 coldbox
应用程序使用 NewRelic
错误捕获。从 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;
}
所以当出错时,我得到以下错误。
The noticeError method was not found.
你可以看到,noticeError()
方法在对象中,但是它被参数重载了。
我在另一个没有任何框架的 coldfusion 项目中使用相同的代码来捕获 NewRelic 错误。
通过Cferror
标签调用error.cfm
,error.cfm中的代码如下
<cfset Application.newRelic.logError( variables.error )>
并且在 NewRelic.cfc 中,logerror()
方法包含与 coldbox 应用程序中相同的代码。 但它在 NewRelic 中记录错误没有任何问题。
这是我需要注意错误并将其记录在 NewRelic 中的方法。
noticeError(java.lang.Throwable, java.util.Map)
所以我只是想通过NewRelic.cfc中logError()中的两个应用程序的以下代码获取第一个参数Cause
的类名,以获得差异。
writeDump(cause.getClass().getName());
我得到
coldfusion.runtime.ExceptionScope
用于冷箱应用
和
coldfusion.runtime.UndefinedVariableException
用于普通冷聚变应用
cause
参数不能从冷盒应用程序中抛出。那么如何从冷盒应用程序中获取原始错误结构呢?并使其可抛出以解决 noticeError method was not found
问题。
底层 class 的变化发生在 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"。
我正在为我的 coldbox
应用程序使用 NewRelic
错误捕获。从 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;
}
所以当出错时,我得到以下错误。
The noticeError method was not found.
你可以看到,noticeError()
方法在对象中,但是它被参数重载了。
我在另一个没有任何框架的 coldfusion 项目中使用相同的代码来捕获 NewRelic 错误。
通过Cferror
标签调用error.cfm
,error.cfm中的代码如下
<cfset Application.newRelic.logError( variables.error )>
并且在 NewRelic.cfc 中,logerror()
方法包含与 coldbox 应用程序中相同的代码。 但它在 NewRelic 中记录错误没有任何问题。
这是我需要注意错误并将其记录在 NewRelic 中的方法。
noticeError(java.lang.Throwable, java.util.Map)
所以我只是想通过NewRelic.cfc中logError()中的两个应用程序的以下代码获取第一个参数Cause
的类名,以获得差异。
writeDump(cause.getClass().getName());
我得到
coldfusion.runtime.ExceptionScope
用于冷箱应用
和
coldfusion.runtime.UndefinedVariableException
用于普通冷聚变应用
cause
参数不能从冷盒应用程序中抛出。那么如何从冷盒应用程序中获取原始错误结构呢?并使其可抛出以解决 noticeError method was not found
问题。
底层 class 的变化发生在 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"。