我有一个下面给出的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>
我面临的问题是,如果没有发生异常,目标即被执行,意味着等于语句写在规则中无效。 任何机构都可以让我知道解决方案。