Mit*_*tli 2 c# logging multithreading nlog
我在我的项目中使用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....
Run Code Online (Sandbox Code Playgroud)
它只是为了并行度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....
Run Code Online (Sandbox Code Playgroud)
我看到了一些解决方案,但它们看起来不够好:
这个问题有一些干净的解决方案吗?
blo*_*net 11
在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" />
Run Code Online (Sandbox Code Playgroud)
更多信息:
https://github.com/NLog/NLog/wiki/ThreadId-Layout-Renderer
我用于生产,通常它的工作原理.它并不完美.
但是所有操作(我记录的)都是顺序的,这threadid描述了哪个operanios在哪个`ThreadId.