Я использую NLog согласно требованию Я обрабатываю несколько тысяч записей в параллельном циклеNlog не писать все строки в файл в параллельном цикле
Для каждого элемента После нескольких операций в, специфических последовательностях (Pipe Fliter шаблон) Я хочу, чтобы записывайте записи с особыми значениями (которые не загружаются в хранилище данных) в папку «Вывод».
Эта папка вывода не является {basedir}
, но специфична для каждого клиента, поэтому я использую nlog и nlog Variable и assoicated configuration, как показано ниже, для записи значений в файл для многопоточного приложения.
В файле конфигурации
<variable name="outPutFileFullName" value=""/>
<target xsi:type="File" name="OutPutFile" fileName="${mdc:item=outPutFileFullName}"
layout="${message}"/>
<logger name ="ABC"
level="Info" writeTo="OutPutFile"></logger>
В кодексе
_loggingService.SetMappedDiagnosticsContext("outPutFileFullName", outPutFolderFile);
Parallel.ForEach(allItems
itemLine =>
{
itemLine.OutPutFileFullName = outPutFolderFile;
var pipeLine = new PipeLine<TEST>();
pipeLine.Register(new Operation1<TEST>(_loggingService))
.Register(new Operation2<TEST>(_loggingService))
.Register(new Operation3<TEST>(_loggingService))
.Execute(itemLine);
});
В работе 3 У меня есть простой метод
private void WriteToFileFromObject(Test obj)
{
LoggingService.Info(obj.FileLineNumber.ToString());
}
Я ожидал этот процесс, чтобы написать 100 записей, но записывает только 17 записей всегда, но не одно и то же, а не в определенном порядке.
Если изменить fileName="${mdc:item=outPutFileFullName}"
в конфигурационном файле до постоянного значения, как fileName="${basedir}/logs/Test.log"
то все 100 записей записываются в файл. Любая идея Почему?