【问题标题】:what is the difference between AsyncTaskTarget and AsyncWrapper Target in NLog 4.5?NLog 4.5 中的 AsyncTaskTarget 和 AsyncWrapper Target 有什么区别?
【发布时间】:2019-02-01 07:34:03
【问题描述】:

AsyncTaskTargetAsyncWrapper 有什么区别?

哪个更好?

我看到 AsyncWrapper 有更多的配置选项(如 queueLimitoverflowAction 等),这对我很重要(我不希望日志被丢弃,即使缓冲了超过 10000 条日志,因为我正在为一些大公司的网站工作)。

那么,这是唯一的区别吗?

为什么我们甚至还有 AsyncTaskTarget 之类的东西?

此外,如果我将 AsyncTaskTarget 和 AsyncWrapper 与这样的东西结合起来会发生什么:

CustomTargetExtendingAsyncTaskTarget customTarget = CustomTargetExtendingAsyncTaskTarget();
AsyncTargetWrapper asyncTargetWrapper = new AsyncTargetWrapper(customTarget, 100000, AsyncTargetWrapperOverflowAction.Grow);

这是个坏主意吗?

【问题讨论】:

标签: asp.net logging asp.net-core asp.net-core-2.0 nlog


【解决方案1】:

总结:

  • AsyncTarget 是一个环绕其他目标以赋予它们异步行为的目标。很高兴知道,可以在 nlog.config 中应用的 async=true 在内部也是 AsyncWrapper。

    例如,将异步写入文件:

    <target name="target2" xsi:type="AsyncWrapper">
       <target name ="target1" xsi:type="File"
                fileName="c:/temp/test.log" layout="${message}"
                keepFileOpen="true" />
    </target>
    
  • AsyncTaskTarget 是一个(抽象)基类,用于创建具有异步行为的自定义目标(例如在 C# 中)。你不能在你的 nlog.config 中使用 AsyncTaskTarget

    Rolf 很好地描述了它: (来自https://github.com/NLog/NLog/issues/2872

    AsyncTaskTarget 是一个类似于 TargetWithLayout 的基类,用于创建您自己的自定义 Target。通过超时处理,它可以更轻松地完成一系列任务。默认情况下,它会确保 Logger 不会停止,因为它只是写入内部队列(如果没有处于活动状态,则会安排写入器任务)。

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 2016-06-12
    • 2020-02-14
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2012-11-14
    相关资源
    最近更新 更多