Я разбудил NLog Raygun из Mindscape, чтобы предоставить больше настроек Raygun в NLog.
RaygunTarget создан и должен переопределить метод Write
следующим образом в документе NLog (https://github.com/NLog/NLog/wiki/How-to-write-a-custom-target).
Чтобы отправить исключение в Raygun, следует следующий код:
protected override void Write(LogEventInfo logEvent)
{
_raygunClient ??= (_raygunClient = CreateRaygunClient());
...
_raygunClient.SendInBackground(exception, tags, userCustomData);
}
SendInBackground
возвращает задачу, которую мы не можем пометить как метод Write
как async void
, поскольку он не случай использования async void
.
Все отлично работает. У нас есть чванство для проверки здоровья. Я хочу проверить, успешно ли отправлено приложение NLog Raygun, но я не знаю, как перехватить исключение в SendInBackground
, если ключ API недействителен. Я имею в виду, есть ли лучший способ проверить, может ли этот RaygunTarget успешно отправить сообщение Raygun?
Если я предоставлю параметр ThrowOnError и метод Write
будет обновлен следующим образом
protected override void Write(LogEventInfo logEvent)
{
_raygunClient ??= (_raygunClient = CreateRaygunClient());
...
var task = _raygunClient.SendInBackground(exception, tags, userCustomData);
if (_setting.ThrowOnError) task.Wait();
}
Это работает, но вопрос: это хороший способ сделать это? Лично я думаю, что это не потому, что он вводит другое поведение или побочный эффект в зависимости от настроек.