【问题标题】:add record in nlog to field with dataType = date将 nlog 中的记录添加到 dataType = date 的字段
【发布时间】:2019-11-24 13:37:11
【问题描述】:

我使用 nlog dll 写入数据库 - oracle with entity frameWork 在行中:

logger.Log(logLevel, "try");

我在 nlog 的日志中得到以下错误:

文字与模板字符串不匹配

代码是:

        SetPropGDC(LogEntity);
        NLog.LogLevel logLevel = SetLogLevel(Level.Debug);
        logger.Log(logLevel, "try");
        ClearGDC();



 private void SetPropGDC(LogEntity LogEntity)
    {
        GlobalDiagnosticsContext.Set(processId, LogEntity.PROCESS_ID.ToString());
        GlobalDiagnosticsContext.Set("TIME_STAMP", DateTime.Now);
        GlobalDiagnosticsContext.Set(customerId, LogEntity.CUSTOMER_ID.ToString());

    }
<targets>
<target name="TRACEDatabase" type="DataBase"  keepConnection="false" 
         dbProvider="Oracle.ManagedDataAccess.Client" connectionString="${gdc:connectionString}"
         commandText="insert into TLOG_SITE_GENERAL_TRACE( PROCESS_ID,TIME_STAMP,CUSTOMER_ID)
                       values(:PROCESS_ID,:TIME_STAMP,:CUSTOMER_ID)">
  <parameter name="PROCESS_ID" layout="${gdc:PROCESS_ID}" />
  <parameter name="TIME_STAMP" layout="${gdc:TIME_STAMP}" />
  <parameter name="CUSTOMER_ID" layout="${gdc:CUSTOMER_ID}" />

</target>

我尝试在 Web.config 中更改行:

      <parameter name="TIME_STAMP" layout="${gdc:TIME_STAMP}" />

到:

   <parameter name="TIME_STAMP" layout="${longDate}" />

我也遇到了同样的错误

谁能帮忙?

【问题讨论】:

  • 您是否尝试过使用dbType="SqlDbType.DateTime" 作为参数?另见github.com/NLog/NLog/wiki/Database-target
  • @RolfKristensen 我添加了 dbType ="SqlDbType,DateTime" 现在月份无效
  • 很抱歉没有看到您使用的是 Oracle。尝试这样做 dbType="DateTime"

标签: c# oracle nlog


【解决方案1】:

NLog DatabaseTarget 参数默认转换为字符串。您可以通过指定 dbType 来更改数据类型,使其与数据库列匹配:

<target name="TRACEDatabase" type="DataBase">
    <parameter name="PROCESS_ID" layout="${event-properties:PROCESS_ID}" />
    <parameter name="TIME_STAMP" layout="${date}" dbType="DateTime" />
    <parameter name="CUSTOMER_ID" layout="${event-properties:CUSTOMER_ID}" />
</target>

顺便说一句。使用全局变量来传输特定于上下文的细节是个坏主意。

您应该使用 NLog LogEventInfo 属性:

var logLevel = SetLogLevel(Level.Debug);
var theEvent = new NLog.LogEventInfo(logLevel, null, "try");
theEvent.Properties["PROCESS_ID"] = LogEntity.PROCESS_ID.ToString();
theEvent.Properties["CUSTOMER_ID"] = LogEntity.CUSTOMER_ID.ToString();
log.Log(theEvent);

另请参阅:https://github.com/NLog/NLog/wiki/EventProperties-Layout-Renderer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多