找不到noticeError方法。使用Coldbox和NewRelic进行错误跟踪时

时间:2015-10-05 08:53:21

标签: exception-handling coldfusion newrelic coldbox

我正在为NewRelic应用程序使用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方法。

enter image description here

你可以看到,noticeError()方法存在于对象中,但是它被参数重载。

我在另一个没有任何框架的coldfusion项目中使用相同的代码进行NewRelic错误捕获。

通过error.cfm标记调用Cferror,并将error.cfm中的代码调用如下

<cfset Application.newRelic.logError( variables.error )>

在NewRelic.cfc中,logerror()方法包含与冷箱应用程序中相同的代码。 但它在NewRelic中记录错误没有任何问题。

这是我需要注意错误并将其记录在NewRelic中的方法。

  

noticeError(java.lang.Throwable,java.util.Map)

所以我只想通过NewRelic.cfc中logError()中的两个应用程序的以下代码获取第一个参数Cause的类名,以获得差异。

writeDump(cause.getClass().getName());

我正在

对于Coldbox应用程序,

coldfusion.runtime.ExceptionScope 和 正常冷敷申请coldfusion.runtime.UndefinedVariableException

cause参数不能从coldbox应用程序抛出。那么如何从冷箱应用程序中获取原始错误结构?并使其可以修复noticeError method was not found问题。

1 个答案:

答案 0 :(得分:3)

当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 bug跟踪器中指出了这张票,详细说明了引擎中的这种行为。它被关闭为“neverFix”。

https://bugbase.adobe.com/index.cfm?event=bug&id=3976478