internal static void LogCommandExecuted(IDbConnectionFactory connectionFactory, Guid commandId, string sql, object?param, TimeSpan duration) { if (connectionFactory == null) { throw new ArgumentNullException(nameof(connectionFactory)); } if (sql.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(sql)); } if (!ConnectionLoggerLookup.TryGetValue(connectionFactory, out var loggingConfig)) { return; } if (!ConnectionRegistry.TryGetConnectionId(connectionFactory, out var connectionId)) { connectionId = Guid.Empty; } var parameters = ToDictionary(param); loggingConfig.Logger.Log( loggingConfig.LogLevel, "Connection {connectionId} completed executing query {commandId}. Query {sql} with parameters {@parameters} took {duration}ms to execute.", connectionId, commandId, sql, parameters, (ulong)duration.TotalMilliseconds ); }
internal static void LogCommandRetry(IDbConnectionFactory connectionFactory, Guid commandId, string sql, object?param, int retryAttempt, TimeSpan delay) { if (connectionFactory == null) { throw new ArgumentNullException(nameof(connectionFactory)); } if (sql.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(sql)); } if (!ConnectionLoggerLookup.TryGetValue(connectionFactory, out var loggingConfig)) { return; } if (!ConnectionRegistry.TryGetConnectionId(connectionFactory, out var connectionId)) { connectionId = Guid.Empty; } var parameters = ToDictionary(param); loggingConfig.Logger.Log( loggingConfig.LogLevel, "Connection {connectionId} is retrying {commandId}, attempt #{retryAttempt} after a delay of {delay}. Attempting to execute {sql} with parameters {@parameters}.", connectionId, commandId, retryAttempt, delay, sql, parameters ); }
/// <summary> /// Initializes a new instance of the <see cref="SchematicConnection"/> class. /// </summary> /// <param name="connectionId">A connection identifier.</param> /// <param name="connectionFactory">A database connection factory.</param> /// <param name="dialect">The dialect used for <paramref name="connectionFactory"/>.</param> /// <exception cref="ArgumentException">An empty connection ID was provided.</exception> /// <exception cref="ArgumentNullException"><paramref name="connectionFactory"/> or <paramref name="dialect"/> is <c>null</c>.</exception> public SchematicConnection(Guid connectionId, IDbConnectionFactory connectionFactory, IDatabaseDialect dialect) { if (connectionId == Guid.Empty) { throw new ArgumentException("An empty connection ID was provided. Consider using Guid.NewGuid() instead.", nameof(connectionId)); } ConnectionId = connectionId; DbConnection = connectionFactory ?? throw new ArgumentNullException(nameof(connectionFactory)); Dialect = dialect ?? throw new ArgumentNullException(nameof(dialect)); ConnectionRegistry.RegisterConnection(connectionId, connectionFactory); }