【问题标题】:Why NLogTraceListener ignores nlog async wrapper?为什么 NLogTraceListener 忽略 nlog 异步包装器?
【发布时间】:2018-02-02 09:19:27
【问题描述】:

我使用 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 源日志。

你有什么想法可以解决这个问题吗?

【问题讨论】:

标签: c# web-services asynchronous asmx nlog


【解决方案1】:

解决方法是添加disableFlush-setting:

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

NLog 4.4 中的当前默认值是一把霰弹枪,准备射你自己的脚,将随着 NLog 4.5 改变

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多