为什么NLogTraceListener忽略了nlog异步包装?

时间:2018-02-02 09:19:28

标签: c# web-services asynchronous asmx nlog

我使用NLog来记录asmx服务事件。 web.config的一部分:

<system.diagnostics>
    <trace autoflush="true" />
    <sources>
        <source name="System.Web.Services.Asmx">
            <listeners>
                <add name="nlog" type="NLog.NLogTraceListener, NLog" />
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="System.Web.Services.Asmx" value="All" />
    </switches>
</system.diagnostics>

我在nlog.config中使用asyncWrapper:

<targets>
    <target name="AsyncTarget" xsi:type="AsyncWrapper">
        <target xsi:type="File" fileName="//192.168.0.5/Logs/file.log" layout="${message}"/>
    </target>
</targets>

<rules>
    <logger name="*" writeTo="AsyncTarget"/>
</rules>

所有日志都已成功记录。 10个请求(同时模拟)大约需要1秒

问题是日志目标IP无法访问时。然后10个请求(在相同的温度下模拟)需要大约10秒

似乎异步包装器无法正常工作。

当我在我的web.config中将NLog.NLogTraceListener侦听器更改为System.Diagnostics.TextWriterTraceListener时,问题就消失了。然后10请求大约需要1秒(当日志目标IP无法访问时)。但我需要使用NLog。

当我禁用web.config中的asmx从日志中仅使用nlog方法登录时,问题就消失了,然后10个请求大约需要1秒(当日志目标IP无法访问时)和异步包装器工作。但我需要使用asmx源日志。

您对如何解决此问题有任何想法吗?

1 个答案:

答案 0 :(得分:1)

解决方法是添加disableFlush-setting:

<add name="nlog" type="NLog.NLogTraceListener, NLog" disableFlush="true" />

NLog 4.4中的当前默认值是准备用脚射击自己的霰弹枪,并将使用NLog 4.5进行更改