我不太熟悉NLog,但我们有一些代码可以执行异步日志目标:
try {
logger.Info(requestMessage, XmlSerialize(request), name);
SendRequest(request)
} catch (Exception e){
logger.ErrorException(ex.Message, ex);
}
这基本上序列化了我们即将发布的Web服务请求。
我们遇到过一种情况,即SendRequest方法抛出一个异常(它是一个1分钟的超时承包Web服务),并通过我们的ErrorException调用记录,但序列化的请求永远不会被记录。
我的理论是它与Async日志记录有关吗?也许队列被异常冲刷了?但它在队列中超过一分钟,通常它会被记录,所以我不确定?
有没有人有任何想法?
以下是web.config中的NLog配置:
<nlog autoReload="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd">
<variable name="logDirectory" value="${basedir}/logs/${shortdate}" />
<targets async="true">
<target name="ServiceRequestLog" type="File" filename="${logDirectory}/ServiceRequestLog.txt" layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=tostring}${newline}" />
</targets>
<rules>
<logger name="ServiceRequestLog" minlevel="Info" writeTo="ServiceRequestLog" />
</rules>