NLog将自定义参数写入存储过程

时间:2016-05-16 16:54:48

标签: c# sql-server nlog

我正在尝试使用NLog(版本4)将一些数据保存到SQL Server表中。我有一个参数不包含任何正常NLog参数的过程。

我的nlog.config看起来像这样:

<target xsi:type="Database"
      name="database"
      dbProvider="System.Data.SqlClient"
      connectionStringName="nlogConnection"
      commandText="EXEC dbo.usp_LogParserMessage @Message, @Parser, @Org, @LabOrg, @ChartNum, @AccessionId, @Status, @TransId">

  <parameter name="@Message" layout="${Message}"/>
  <parameter name="@Parser" layout="${event-properties:item=parser}"/>
  <parameter name="@Org" layout="${event-properties:item=org}"/>
  <parameter name="@LabOrg" layout="${event-properties:item=laborg}"/>
  <parameter name="@ChartNum" layout="${event-properties:item=chartnum}"/>
  <parameter name="@AccessionId" layout="${event-properties:item=accessionid}"/>
  <parameter name="@Status" layout="${event-properties:item=status}"/>
  <parameter name="@TransId" layout="${event-properties:item=transid}"/>      
</target>

我尝试创建一个自定义类来填充参数。

public LogHelper(string name)
{
    _logger = LogManager.GetLogger("database");
}

public void WriteMessage(string parser, string message, string org, string laborg, string chartNum, string accessionId, string status, string transid)
{
        ///
        /// create log event from the passed message
        /// 
        LogEventInfo logEvent = new LogEventInfo(LogLevel.Trace, "", message);

        //
        // set event-specific context parameter
        // this context parameter can be retrieved using ${event-context:EventID}
        //
        logEvent.Properties["parser"] = parser;
        logEvent.Properties["org"] = org;
        logEvent.Properties["laborg"] = laborg;
        logEvent.Properties["chartnum"] = chartNum;
        logEvent.Properties["accessionid"] = accessionId;
        logEvent.Properties["status"] = status;
        logEvent.Properties["transid"] = transid;

        // 
        // Call the Log() method. It is important to pass typeof(MyLogger) as the
        // first parameter. If you don't, ${callsite} and other callstack-related 
        // layout renderers will not work properly.
        //
        try
        {
            _logger.Log(logEvent);
        }
        catch (Exception er)
        {
            string error = er.ToString();
        }
}

它不会抛出错误,但也不会写入数据库。

我很感激任何建议或其他方式来做到这一点。

由于 辙

0 个答案:

没有答案