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>() .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, string.Format(CultureInfo.InvariantCulture, "{0:N0}", elapsedMilliseconds)), state.Parameters // Interpolation okay here because value is always a string. .Select(p => $"{p.Name}={FormatParameter(p)}") .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)); }); } }