/// <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 void DbCommandLogData_implements_enumerable_of_key_value_pair() { var parameter = new DbParameterLogData( "@param", "Muffin", true, ParameterDirection.Input, DbType.String, false, 0, 0, 0); #pragma warning disable 618 var logData = new DbCommandLogData( #pragma warning restore 618 "FakeCommand", CommandType.Text, 30, new List <DbParameterLogData> { parameter }, 1000); var keyValuePairs = logData.ToList(); Assert.Equal("FakeCommand", keyValuePairs.Single(kvp => kvp.Key == "CommandText").Value); Assert.Equal(CommandType.Text, keyValuePairs.Single(kvp => kvp.Key == "CommandType").Value); Assert.Equal(30, keyValuePairs.Single(kvp => kvp.Key == "CommandTimeout").Value); Assert.Equal(parameter, ((List <DbParameterLogData>)keyValuePairs.Single(kvp => kvp.Key == "Parameters").Value).Single()); Assert.Equal(1000L, keyValuePairs.Single(kvp => kvp.Key == "ElapsedMilliseconds").Value); }