我使用 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。
当我仅使用代码中的 nlog 方法从 web.config 禁用 asmx 日志日志时,问题就消失了,然后 10 个请求大约需要 1 秒(当日志目标 IP 无法访问时)并且异步包装器工作。但是我需要使用 asmx 源日志。
你有什么想法如何解决这个问题吗?
解决方案是添加禁用刷新设置:
<add name="nlog" type="NLog.NLogTraceListener, NLog" disableFlush="true" />
NLog 4.4 中的当前默认值是准备向自己的脚开枪的霰弹枪,并将在 NLog 4.5 中进行更改