C# 添加记录nlog日期获取错误无效月份

C# 添加记录nlog日期获取错误无效月份,c#,oracle,date,nlog,C#,Oracle,Date,Nlog,我使用nlogdll写入数据库-oracle,并在以下行中使用实体框架: logger.Log(logLevel, "try"); 我在NLog的日志中发现以下错误: Warn DatabaseTarget:参数:“时间戳”-未能分配DbType=OracleDbType.Date 错误DatabaseTarget(Name=WS_TRACE):写入数据库时出错。异常:System.Data.OracleClient.OracleException(0x80131938):ORA-0184

我使用nlogdll写入数据库-oracle,并在以下行中使用实体框架

logger.Log(logLevel, "try");  
我在NLog的日志中发现以下错误:

Warn DatabaseTarget:参数:“时间戳”-未能分配DbType=OracleDbType.Date 错误DatabaseTarget(Name=WS_TRACE):写入数据库时出错。异常:System.Data.OracleClient.OracleException(0x80131938):ORA-01843:无效月份

代码是:

 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());

    }

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


致:



我得到了同样的错误首先,强烈建议使用内置的布局渲染器

例如,
${longdate}
,还有
${processid}
。这些都是优化的,更容易使用。 你可以找到所有的

请注意,在多线程程序中使用全局上下文(GDC)可能是危险的。同样在单线程中,您可能会“泄漏”某些上下文

但我想真正的问题是你的NLog已经过时了。NLOG4.6中增加了DbType支持

因此,首先更新NLog(强烈建议使用Nuget)。我在这里使用NLog 4.6.3+,但建议更新为NLog 4.7

那么对于代码,我建议您这样做:

logger.WithProperty("CustomerId", LogEntity.CUSTOMER_ID).Log(loglevel, "Message");
并进行如下配置:


另见

不需要使用特定的OracleDbType,因此我选择只使用“Date”(即
DbType.Date
,请参见我找到了解决方案! 我将dbType参数从以下位置更改为:

 <parameter name="TIME_STAMP" layout="${gdc:TIME_STAMP}" dbType="OracleDbType.Date"  />

致:



它是有效的!

NLog版本是什么?您是否使用NuGet加载NLog包?重复:我想对此进行升级,但不清楚这是修复还是尝试。这对${longdate}也有效吗?然后我建议您这样做。
 <parameter name="TIME_STAMP" layout="${gdc:TIME_STAMP}" dbType="DateTime" />