我需要創建一個使用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 –