NLog 4.5 中的 AsyncTaskTarget 和 AsyncWrapper Target 有什么区别?

what is the difference between AsyncTaskTarget and AsyncWrapper Target in NLog 4.5?

AsyncTaskTarget and AsyncWrapper有什么区别?

哪个更好?

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

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

为什么我们还要有类似 AsyncTaskTarget 的东西?

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

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

这是个坏主意吗?

总结:

  • 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 是一个(抽象的)基础 class,用于创建具有异步行为的自定义目标(例如在 C# 中)。您不能在 nlog.config

    中使用 AsyncTaskTarget

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

    AsyncTaskTarget is a base-class just like TargetWithLayout for creating your own custom Target. It makes it easier to make one chain of tasks with timeout-handling. By default it will ensure the Logger is not stalled, as it just writes to the internal-queue (and schedules a writer-task if none is active).