У меня есть служба WCF, и мы используем NLog для регистрации.Служба может вызываться асинхронно, и поэтому журналы записываются асинхронно.Нам нужно, чтобы журналы были буферизованы и записаны в файл только после завершения метода обслуживания.Как мне это сделать?
РЕДАКТИРОВАТЬ Текущая конфигурация Nlog
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="Trace_file" xsi:type="File" fileName="${basedir}//..//LOGS//Trace//${date:format=dd.MM.yyyy}.log" layout="${longdate}|${uppercase:${level}}|${message} ${exception:format=tostring,StackTrace}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" maxlevel="Info" writeTo="Trace_file" />
</rules>
</nlog>
Пример службы
public class Service1 : IService1
{
static Logger logger = LogManager.GetCurrentClassLogger();
public void DoWork(int param)
{
logger.Info($"DoWork start ({param})");
/*
* Some logic and log write
*/
logger.Info($"DoWork end ({param})");
}
}
После асинхронного вызова
2019-02-07 16:53:56.9709|INFO|DoWork start (2002)
2019-02-07 16:53:56.9709|INFO|DoWork start (2004)
2019-02-07 16:53:56.9709|INFO|DoWork start (2001)
2019-02-07 16:53:57.0290|INFO|DoWork end (2002)
2019-02-07 16:53:57.0370|INFO|DoWork end (2004)
2019-02-07 16:53:56.9834|INFO|DoWork start (2003)
2019-02-07 16:53:57.0581|INFO|DoWork end (2003)
2019-02-07 16:53:57.0761|INFO|DoWork end (2001)
Что мне нужно
2019-02-07 16:55:11.0714|INFO|DoWork start (2001)
2019-02-07 16:55:11.0824|INFO|DoWork end (2001)
2019-02-07 16:55:11.1150|INFO|DoWork start (2002)
2019-02-07 16:55:11.1236|INFO|DoWork end (2002)
2019-02-07 16:55:11.1451|INFO|DoWork start (2003)
2019-02-07 16:55:11.1541|INFO|DoWork end (2003)
2019-02-07 16:55:11.1907|INFO|DoWork start (2004)
2019-02-07 16:55:11.2008|INFO|DoWork end (2004)