Как установить URL-адрес для ошибок, сообщаемых в New Relic из фоновых задач

На вкладке События: ошибки в New Relic отображаются исключения (дата, время, сообщение и трассировка стека), о которых сообщает мое приложение с помощью 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);
        }
    }
}

Я вижу исключения, о которых сообщил ExceptionLogger на сайте New Relic, но в столбце URL указано имя потока вместо транзакции, в данном случае ping.


person David Harkness    schedule 14.03.2013    source источник


Ответы (1)


В зависимости от того, какие параметры вы установили в аннотации @Trace, вы увидите разные значения URL-адреса ошибки, записанного в пользовательском интерфейсе New Relic для ошибки в фоновой задаче.

Указание 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, будет отображаться имя потока.

Мы будем обновлять нашу документацию в будущем, чтобы сделать это более понятным.

person Dan Delany    schedule 29.03.2013
comment
Теперь это работает. В фоновой задаче, фактически выбрасывающей исключения, я по ошибке поместил аннотацию @Trace в метод дальше по цепочке вызовов, так что noticeError был вызван вне транзакции. - person David Harkness; 30.03.2013