AsyncTaskTarget和AsyncWrapper有什么区别?
哪个更好?
我已经看到AsyncWrapper具有更多的配置选项(例如 queueLimit , overflowAction 等),这对我很重要(我不希望日志被丢弃,即使缓冲了超过10000条日志,因为我正在为某个大公司的网站工作。
那么,这是唯一的区别吗?
为什么我们甚至还有类似AsyncTaskTarget的东西?
此外,如果我将AsyncTaskTarget和AsyncWrapper都与以下内容结合会发生什么:
CustomTargetExtendingAsyncTaskTarget customTarget = CustomTargetExtendingAsyncTaskTarget();
AsyncTargetWrapper asyncTargetWrapper = new AsyncTargetWrapper(customTarget, 100000, AsyncTargetWrapperOverflowAction.Grow);
这是个坏主意吗?
答案 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任务)。