/// <summary>
        /// Remove all log-providers and add FluentMigratorConsoleLoggerProvider if enabled by configuration
        /// </summary>
        /// <param name="loggingBuilder"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static ILoggingBuilder AddFluentMigratorConsoleLogger(
            this ILoggingBuilder loggingBuilder,
            IConfiguration configuration = null)
        {
            configuration = GetConfiguration(loggingBuilder, configuration);
            string disabledReason = null;

            if (configuration == null || !configuration.IsMigrationConsoleLogEnabledInternal(out disabledReason))
            {
                disabledReason = disabledReason ?? "by missing configuration";
                loggingBuilder.Services.RemoveFluentMigratorLoggerOptions();
                loggingBuilder.Services.Remove(new ServiceDescriptor(typeof(ILoggerProvider), typeof(FluentMigratorConsoleLoggerProvider)));

                if (MigrationConsoleLoggingDisabledReported == false)
                {
                    MigrationConsoleLoggingDisabledReported = true;
                    Console.ForegroundColor = ConsoleColor.DarkGray;
                    Console.WriteLine($"Migration Console logging is turned off {disabledReason}");
                    Console.ResetColor();
                }

                return(loggingBuilder);
            }

            var options = new FluentMigratorLoggerOptions
            {
                ShowSql         = configuration.IsMigrationConsoleLogShowSqlEnabled(),
                ShowElapsedTime = configuration.IsMigrationLogConsoleShowElapsedTimeEnabled()
            };

            return(loggingBuilder.AddFluentMigratorConsoleLogger(options));
        }
        /// <summary>
        /// Remove all log-providers and add FluentMigratorConsoleLoggerProvider if enabled by configuration
        /// </summary>
        /// <param name="loggingBuilder"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static ILoggingBuilder AddFluentMigratorConsoleLogger(
            this ILoggingBuilder loggingBuilder,
            IConfiguration configuration = null)
        {
            configuration = GetConfiguration(loggingBuilder, configuration);
            if (configuration == null || !configuration.IsMigrationConsoleLogEnabled())
            {
                return(loggingBuilder);
            }

            var options = new FluentMigratorLoggerOptions
            {
                ShowSql         = configuration.IsMigrationLogShowSqlEnabled(),
                ShowElapsedTime = configuration.IsMigrationLogShowElapsedTimeEnabled()
            };

            return(loggingBuilder.AddFluentMigratorConsoleLogger(options, true));
        }
        public static ILoggingBuilder AddFluentMigratorConsoleLogger(
            this ILoggingBuilder loggingBuilder,
            IConfiguration configuration = null)
        {
            configuration = GetConfiguration(loggingBuilder, configuration);
            if (configuration == null || !configuration.IsConsoleLogEnabled())
            {
                return(loggingBuilder);
            }
            loggingBuilder.ClearProviders();

            var options = new FluentMigratorLoggerOptions
            {
                ShowSql         = configuration.IsMigrationLogShowSqlEnabled(),
                ShowElapsedTime = configuration.IsMigrationLogShowElapsedTimeEnabled()
            };

            loggingBuilder.Services.AddSingleton <IOptions <FluentMigratorLoggerOptions> >(new OptionsWrapper <FluentMigratorLoggerOptions>(options));

            return(loggingBuilder.AddFluentMigratorConsoleLogger(options));
        }