/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public static void LogCommandExecuted( [NotNull] this ISensitiveDataLogger logger, [NotNull] DbCommand command, long startTimestamp, long currentTimestamp) { Check.NotNull(logger, nameof(logger)); Check.NotNull(command, nameof(command)); if (logger.IsEnabled(LogLevel.Information)) { var logParameterValues = command.Parameters.Count > 0 && logger.LogSensitiveData; #pragma warning disable 618 var logData = new DbCommandLogData( #pragma warning restore 618 command.CommandText.TrimEnd(), command.CommandType, command.CommandTimeout, command.Parameters .Cast <DbParameter>() .Select( p => new DbParameterLogData( p.ParameterName, logParameterValues ? p.Value : "?", logParameterValues, p.Direction, p.DbType, p.IsNullable, p.Size, p.Precision, p.Scale)) .ToList(), DeriveTimespan(startTimestamp, currentTimestamp)); logger.Log( LogLevel.Information, (int)RelationalEventId.ExecutedCommand, logData, null, (state, _) => { var elapsedMilliseconds = DeriveTimespan(startTimestamp, currentTimestamp); return(RelationalStrings.RelationalLoggerExecutedCommand( string.Format(CultureInfo.InvariantCulture, "{0:N0}", elapsedMilliseconds), state.Parameters // Interpolation okay here because value is always a string. .Select(p => $"{p.Name}={p.FormatParameter()}") .Join(), state.CommandType, state.CommandTimeout, Environment.NewLine, state.CommandText)); }); } }
public static void LogCommandExecuted( [NotNull] this ISensitiveDataLogger logger, [NotNull] DbCommand command, long startTimestamp, long currentTimestamp) { Check.NotNull(logger, nameof(logger)); Check.NotNull(command, nameof(command)); if (logger.IsEnabled(LogLevel.Information)) { var logParameterValues = command.Parameters.Count > 0 && logger.LogSensitiveData; var logData = new DbCommandLogData( command.CommandText.TrimEnd(), command.CommandType, command.CommandTimeout, command.Parameters .Cast <DbParameter>() .ToDictionary(p => p.ParameterName, p => logParameterValues ? p.Value : "?"), DeriveTimespan(startTimestamp, currentTimestamp)); logger.Log( LogLevel.Information, (int)RelationalLoggingEventId.ExecutedCommand, logData, null, (state, _) => { var elapsedMilliseconds = DeriveTimespan(startTimestamp, currentTimestamp); return(RelationalStrings.RelationalLoggerExecutedCommand( string.Format($"{elapsedMilliseconds:N0}"), state.Parameters .Select(kv => $"{kv.Key}='{FormatParameterValue(kv.Value)}'") .Join(), state.CommandType, state.CommandTimeout, Environment.NewLine, state.CommandText)); }); } }