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

时间:2018-08-26 15:46:30

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

AsyncTaskTargetAsyncWrapper有什么区别?

哪个更好?

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

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

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

此外,如果我将AsyncTaskTarget和AsyncWrapper都与以下内容结合会发生什么:

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

这是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

总结:

  • AsyncTarget是一个包装其他目标的目标,以使其具有Async行为。很高兴知道,可以在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不会停顿,因为它只是写入内部队列(如果没有活动,则计划一个writer任务)。