使用带 entity frameWork 的 nlog,值不在预期范围内

Value does not fall within the expected range using nlog with entity frameWork

我使用 nlog dll(版本 3.1.0.0)写入数据库 - oracle,行中有 entity frameWork :

logger.Log(logLevel, "try");

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

Error Error when writing to database System.ArgumentException: Value does not fall within the expected range. at Oracle.ManagedDataAccess.Client.OracleCommand.set_CommandType(CommandType value) at NLog.Targets.DatabaseTarget.WriteEventToDatabase(LogEventInfo logEvent) at NLog.Targets.DatabaseTarget.Write(LogEventInfo logEvent)

代码为:

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

private static LogLevel SetLogLevel(Level level)
    {
        switch (level)
        {
            case Level.Debug: return LogLevel.Debug;
            case Level.Error: return LogLevel.Error;
            case Level.Fatal: return LogLevel.Fatal;
            case Level.Info: return LogLevel.Info;
            default: return LogLevel.Error;
        }

    }

 private void SetPropGDC(LogEntity LogEntity)
    {
        GlobalDiagnosticsContext.Set("connectionString", _unitOfWork.getConnectionString());
        GlobalDiagnosticsContext.Set(processId, LogEntity.PROCESS_ID.ToString());
        GlobalDiagnosticsContext.Set("TIME_STAMP", LogEntity.TIME_STAMP.ToString());
        GlobalDiagnosticsContext.Set(customerId, LogEntity.CUSTOMER_ID.ToString());
        GlobalDiagnosticsContext.Set("REQUEST", LogEntity.REQUEST.ToString());
        GlobalDiagnosticsContext.Set("RESPONSE", LogEntity.RESPONSE.ToString());
        GlobalDiagnosticsContext.Set("EXCEPTION", LogEntity.EXCEPTION.ToString());
        GlobalDiagnosticsContext.Set("STACK_TRACE", LogEntity.STACK_TRACE.ToString());
        GlobalDiagnosticsContext.Set("DETAILS", LogEntity.DETAILS.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,LOG_LEVEL,REQUEST,RESPONSE,EXCEPTION,STACK_TRACE,MESSAGE)
                       values(:PROCESS_ID,:TIME_STAMP,:CUSTOMER_ID,:LOG_LEVEL,:REQUEST,:RESPONSE,:EXCEPTION,:STACK_TRACE,:MESSAGE)">
  <parameter name="PROCESS_ID" layout="${gdc:PROCESS_ID}" />
  <parameter name="TIME_STAMP" layout="${gdc:TIME_STAMP}" />
  <parameter name="CUSTOMER_ID" layout="${gdc:CUSTOMER_ID}" />
  <parameter name="LOG_LEVEL" layout="${level:uppercase=true}" /> 
  <parameter name="REQUEST" layout="${gdc:REQUEST}" />
  <parameter name="RESPONSE" layout="${gdc:RESPONSE}" />
  <parameter name="EXCEPTION" layout="${gdc:EXCEPTION}" />
  <parameter name="STACK_TRACE" layout="${gdc:STACK_TRACE}" />
  <parameter name="MESSAGE" layout="${message}" />
</target>

有人能帮忙吗?

我认为您正在寻找 NLog 4.6 中引入的对数据库参数的类型支持。

PS:请注意事件属性(在 LogEventInfo 上)比示例中的 GlobalDiagnosticsContext 更可靠