【问题标题】:How to set "URL" for errors reported to New Relic from background tasks如何为从后台任务报告给 New Relic 的错误设置“URL”
【发布时间】:2013-03-03 11:56:13
【问题描述】:

New Relic 中的 Events : Errors 选项卡显示我的应用程序使用 NewRelic.noticeError(exception) 报告的异常(日期、时间、消息和堆栈跟踪)。对于那些从网络交易报告的人,它显示了完美的交易 URL。但是对于使用@Trace 注释报告的后台任务,它会显示线程的名称。这是没有意义的,因为线程的名称类似于 pool-23-thread-9927

我可以为每个后台任务分配一个显示名称,或者在报告错误时传递一个名称,以便它显示在 URL 列中,而不是线程的名称?

注意:如果可以避免的话,我宁愿更改线程的名称。

更新

这里是代码的概述。该事务包含在PingJob 中,它会捕获并报告异常。

public class PingJob implements Callable<PingStatus>
{
    @Trace(metricName = "ping", dispatcher = true)
    @Override
    public PingStatus call() {
        try {
            // calls that may throw exceptions
        }
        catch (RuntimeException e) {
            // pass to utility method to log and/or report to New Relic
            ExceptionLogger.log(e, LOG);
        }
    }
}

我在 New Relic 网站上看到 ExceptionLogger 报告的异常,但 URL 列列出了线程的名称而不是事务,在本例中为 ping

【问题讨论】:

    标签: java error-reporting newrelic


    【解决方案1】:

    根据您在 @Trace 注释中设置的参数,您将看到 New Relic UI 中记录的错误 URL 的不同值,用于后台任务中的错误。

    指定metricName 并将dispatcher 设置为true,如

    @Trace(metricName = "YourErrorNameHere", dispatcher = true)
    

    将显示的 URL 设置为 YourErrorNameHere

    不指定metricName,但仍将dispatcher 设置为true,如

    @Trace(dispatcher = true)
    

    会将显示的 URL 设置为您的类名/方法名,例如 com.example.task.BackgroundTask/run

    如果你只使用@Trace本身而不将dispatcher设置为true,则会显示线程名称。

    我们将在未来更新我们的文档以使其更加清晰。

    【讨论】:

    • 现在可以使用了。在实际抛出异常的后台任务中,我错误地将@Trace 注释放在调用链更下游的方法上,以便在事务外部调用noticeError
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多