有条件地执行NLog目标语句

时间:2015-08-06 11:02:04

标签: c# nlog

我有一个下面给出的Enum课程

public enum ScanStatus
{
    Success,
    Failure,
    Exception
}

从.cs文件我已经使用代码

将Exception的值传递给Nlog.config文件
GlobalDiagnosticsContext.Set("ExceptionStatus", Convert.ToString((int)ScanStatus.Exception));

在nlog.config中,我已配置为使用以下代码在数据库中记录消息。

<target name="database" xsi:type="Database" keepConnection="true"
           dbProvider="System.Data.SqlClient"
           connectionStringName="PaymentScan"
            commandText="INSERT INTO [dbo].[LoggingTrace] (PaymentId, ExceptionStatus, TraceDetails) VALUES (@ItemId, @ExceptionStatus, @Message)">
    <parameter name="@message" layout="${message}"/>
    <parameter name="@ItemId" layout="${gdc:ItemId}"/>
    <!-- custom field! -->
    <parameter name="@ExceptionStatus" layout="${gdc:ExceptionStatus}"/>
    <!-- custom field! -->
  </target>

我希望只有在代码中发生任何异常时才能执行此目标语句。为了解决这个问题,我编写了以下规则

<rules>
<logger name="*" minlevel="Info" writeTo="database">
        <filters>
          <when condition="equals('${gdc:ExceptionStatus}', '2')" action="Log" />
        </filters>
      </logger></rules>

我面临的问题是,如果没有发生异常,目标即被执行,意味着等于语句写在规则中无效。 任何机构都可以让我知道解决方案。

0 个答案:

没有答案