我从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 / ...
而不是从TargetWithLayout
继承,您可以从AsyncTaskTarget
继承: