我有一套Windows服务-共7个。这些服务跟踪不同工作流的不同方面。
在其中,我设置了一个名为scanid的字段:
public static void SetScanid(this ILogger logger, int? scanid)
{
GlobalDiagnosticsContext.Set("scanid", scanid);
}
在nlog.config文件中,我用它来填充部分日志以便快速查找/查找:
<variable name="messageLayout" value="[${longdate}] -- [SID:${gdc:item=scanid}] ... " />
在任何给定过程的开始,我设置了SCANID,最后清除了它。
现在,在7个不同的日志文件中,我将SID作为可搜索字段。
我可以改为:创建一个仅在填充该字段时才记录到给定文件的目标吗?
说,类似
<target xsi:type ="File"
name="sidTarget"
fileName="Logs\Process-${gdc:item=scanid}.log"
when=" ??? scanid is not null or empty ??? "
... />
或者规则中是否有涵盖这一点的东西?
答案 0 :(得分:1)
您可以在<rules>
部分进行配置。
例如
<logger name="*" writeTo="sidTarget">
<filters>
<when condition="length('${gdc:item=scanid}') == 0" action="Ignore" />
</filters>
</logger>
答案 1 :(得分:1)
另一种解决方案是使用NLog FallbackGroup目标。它允许您将多个目标分组,以便它们成为一个目标。如果该组中的第一个目标失败,则它将重试该组中的下一个目标(使用其他文件名)。