NLog目标中的HttpClient

时间:2016-11-18 15:31:52

标签: nlog

我需要创建一个使用HttpClient的Target。 HttpClient不包含任何同步方法,它们都是Task返回异步调用。在NLog目标中使用它的最佳方法是什么,因为api似乎不是异步/等待意识?

2 个答案:

答案 0 :(得分:1)

如果你想让事情变得简单,你可以在async-task上做一个Wait()。然后使用AsyncTargetWrapper包装自定义目标。然后,您也不必担心有太多活动的http请求。

但NLog对执行延迟日志写操作的目标没有任何问题。唯一需要的合同是在延迟的log-write-operation最终完成之后调用与LogEventInfo一起提供的异步延续(也许请查看NetworkTarget获取一些灵感)

答案 1 :(得分:1)

也许这样的事情应该有效:

public class CustomTarget : Target
{

protected override async void Write(NLog.Common.AsyncLogEventInfo logEvent)
{
    try
    {
           await WriteAsync(logEvent.LogEvent).ConfigureAwait(false);
           logEvent.Continuation(null);
    }
    catch (Exception ex)
    {
          InternalLogger.Error(ex, "Failed to sent message");
          logEvent.Continuation(ex);
    }
}

}

或从此PR中窃取代码:https://github.com/NLog/NLog/pull/2006