【发布时间】:2015-01-06 11:02:59
【问题描述】:
我正在使用 Nlog 根据要求,我正在并行循环中处理几千条记录
对于每个项目按特定顺序(管道过滤器模式)进行多次操作后,我想将特定记录(无法加载到数据存储区)写入输出文件夹。
此输出文件夹不是{basedir},而是特定于每个客户端,因此我使用如下的 nlog 和 nlog 变量以及相关配置将值写入多线程应用程序的文件中。
在配置文件中
<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 条记录写入文件。知道为什么吗?
【问题讨论】:
标签: c#-4.0 logging visual-studio-2013 nlog parallel.foreach