我需要创建一个使用HttpClient的目标。 HttpClient不包含任何同步方法,它们都是Task返回异步调用。在NLog目标中使用这种方法的最佳方法是什么?看到api似乎不是异步/等待意识?NLog目标中的HttpClient
1
A
回答
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
1
如果你想让事情变得简单,那么你可以在异步任务上做一个Wait()。然后使用AsyncTargetWrapper包装您的自定义目标。那么你也不必担心有太多的活动http请求。
但是NLog对执行延迟日志写入操作的目标没有问题。唯一需要的合同是在延迟的日志写入操作终于完成之后调用与LogEventInfo一起提供的异步延续(也许看一下NetworkTarget寻求灵感)
相关问题
- 1. NLog中的PerfCounter目标的用途
- 2. NLog mySQL目标配置
- 3. NLog与咆哮Windows目标
- 4. NLog邮件目标超时
- 5. NLOG内存目标错误
- 6. NLog目标文件名
- 7. NLog JSNLog的自定义目标
- 8. 存取存储器目标在NLOG
- 9. 如何取消订阅NLog目标
- 10. ASP.NET MVC - NLog文件目标未找到
- 11. NLOG定制目标XSD警告
- 12. NLog异步目标时间戳
- 13. Nlog-如何在多个目标
- 14. NLog文件目标在Xamarin MonoMac项目中不起作用
- 15. 在数据库目标上的NLog中使用存储过程
- 16. 如何在WPF应用程序中使用NLog的RichTextBox目标?
- 17. 如何将RichTextBox用作WPF应用程序中的NLog目标?
- 18. 如何在NLog中记录网络目标的异常
- 19. 在自定义NLog目标中检索HttpContext
- 20. 如何在NLog中配置默认目标
- 21. 使用DI在NLog目标中设置属性
- 22. NLOG - StackOverflow的例外/ NLog.NLogRuntimeException与MySQL数据库的目标发生
- 23. 如何在Apache HttpClient中更新请求的目标主机?
- 24. 在项目中使用新的httpclient-4.0.1 jar使用commons-httpclient
- 25. NLog在主目标无法登录时尝试另一个目标
- 26. 异步书写的自定义NLog目标
- 27. 初始化Nlog事件日志目标时的安全异常
- 28. 使用NLog(目标未找到)的Azure Application Insight
- 29. NLOG XSI:类型不与自定义的目标工作
- 30. HTTP错误401 NLOG WebService的目标与Windows验证
也许这也是存储'Tasks'目标的选项和''FlushAsync'他们await'? – Julian
@Julian有没有计划更新NLog以支持基于任务的异步方法? – Dismissile
@Dismissile NLog ver。 4.4.6包含https://github.com/NLog/NLog/blob/master/src/NLog/Targets/AsyncTaskTarget.cs –