C# 添加记录nlog日期获取错误无效月份
我使用nlogdll写入数据库-oracle,并在以下行中使用实体框架: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
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" />