NLog Raygun-调用SendInBackground时如何捕获异常

问题描述 投票:0回答:1

我从Mindscape派生了NLog Raygun,以在NLog中提供Raygun的更多设置。

创建了RaygunTarget,并需要按照NLog文档(Write)的要求重写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,但是在API密钥无效的情况下,我不知道如何捕获SendInBackground中的异常。我的意思是,有一种更好的方法来测试此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();
}

它有效,但是一个问题是:这是一个好方法吗?我个人认为这不是因为它会基于设置引入不同的行为或副作用。

我从Mindscape派生了NLog Raygun,以在NLog中提供Raygun的更多设置。创建一个RaygunTarget,并且需要重写Write方法,如下所示NLog文档(https://github.com/NLog/NLog / ...

nlog raygun
1个回答
0
投票

而不是从TargetWithLayout继承,您可以从AsyncTaskTarget继承:

© www.soinside.com 2019 - 2024. All rights reserved.