示例#1
0
        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
                );
        }
示例#2
0
        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);
        }