我在项目中使用了nlog logger。
我的程序根据从sql server获取的数据生成xml文件。我正在用PLINQ做这个。但我也必须记录跟踪信息,以便能够对prod环境中的特殊情况进行一些调查。
结果日志来自多个线程时看起来很糟糕。例如:
Operation 1 starded
Deserializing XXX
Operation 2 started
Deserializing XXX finished with status X
Filling XXX with data from Z
Deserializing YYY....
它仅适用于并行度2。
我希望看到这样的结果:
Operation 1 starded
Deserializing XXX
Deserializing XXX finished with status X
Filling XXX with data from Z
Operation 1 finished
Operation 2 started
Deserializing YYY....
我看到了一些解决方案,但看起来不够好:
这个问题有一些干净的解决方案吗?
答案 0 :(得分:10)
在NLOG配置文件中,有${threadid}
语法。像这样使用:
<target name="file" xsi:type="File"
layout="${longdate} [${threadid}] ${level:uppercase=true} ${message} ${exception:format=tostring}"
fileName="${basedir}/logs/log.txt"
archiveFileName="${basedir}/logs/log.{#####}.txt"
archiveAboveSize="10485760"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
更多信息:
https://github.com/NLog/NLog/wiki/ThreadId-Layout-Renderer
我在制作中使用它并且通常有效。它并不完美。
但所有操作(我记录的)都在顺序中,而threadid
描述了哪个operanios在哪个`ThreadId。