【问题标题】:The noticeError method was not found. while using Coldbox and NewRelic for Error tracking未找到 noticeError 方法。在使用 Coldbox 和 NewRelic 进行错误跟踪时
【发布时间】:2015-10-06 05:53:35
【问题描述】:

我只是为我的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;
}

所以当错误时,我得到以下错误。

noticeError 方法没有找到。

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

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

通过Cferror标签调用error.cfm,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());

我来了

coldfusion.runtime.ExceptionScope 用于冷箱应用程序 和 coldfusion.runtime.UndefinedVariableException 用于普通冷熔应用

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

【问题讨论】:

标签: exception-handling coldfusion newrelic coldbox


【解决方案1】:

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

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

【讨论】:

  • 感谢您对此问题的解释和票证创建让我试试,如果有任何其他解决方法。
  • 仅供参考:COLDBOX-476 已在 ColdBox 的前沿版本中得到修复,一旦稳定,将在我们的 4.2.0 版本中退出。此修复删除了 duplicate() 调用,因此可以解决 ColdFusion 行为。
  • 我在冷箱 4.2.0 上找到了解决此问题的方法,现在我的冷箱应用程序在 Newrelic 上记录错误。
猜你喜欢
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2015-08-10
相关资源
最近更新 更多