/// <summary>
        /// Creates an hourly rolling file sink that rolls files every hour with an
        /// overload to pass ITextFormatter.
        /// </summary>
        /// <param name="configuration"><see cref="LoggerSinkConfiguration"/></param>
        /// <param name="formatter">Formatter to control how events are rendered into the file. To control
        /// plain text formatting, use the overload that accepts an output template instead.</param>
        /// <param name="logDirectory">The names of the directory to be logged</param>
        /// <param name="minimumLevel">Minimum <see cref="LogLevel"/></param>
        /// <param name="retainedFileCountLimit">The maximum number of log files that will be retained,
        /// including the current log file. The default is null which is unlimited.</param>
        /// <returns></returns>
        public static LoggerConfiguration HourlyRollingFileAlternate(
            this LoggerSinkConfiguration configuration,
            ITextFormatter formatter,
            string logDirectory,
            LogEventLevel minimumLevel = LevelAlias.Minimum,
            int?retainedFileCountLimit = null)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            var sink = new HourlyRollingFileSink(logDirectory, formatter, retainedFileCountLimit);

            return(configuration.Sink(sink, minimumLevel));
        }
        /// <summary>
        /// Creates an hourly rolling file sink that rolls files every hour.
        /// </summary>
        /// <param name="configuration"><see cref="LoggerSinkConfiguration"/></param>
        /// <param name="logDirectory">The names of the directory to be logged</param>
        /// <param name="minimumLevel">Minimum <see cref="LogLevel"/></param>
        /// <param name="outputTemplate">The template for substituting logged parameters</param>
        /// <param name="formatProvider">A culture specific format provider</param>
        /// <returns></returns>
        public static LoggerConfiguration HourlyRollingFileAlternate(
            this LoggerSinkConfiguration configuration,
            string logDirectory,
            LogEventLevel minimumLevel     = LevelAlias.Minimum,
            string outputTemplate          = DefaultOutputTemplate,
            IFormatProvider formatProvider = null)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            var templateFormatter = new MessageTemplateTextFormatter(outputTemplate, formatProvider);
            var sink = new HourlyRollingFileSink(logDirectory, templateFormatter);

            return(configuration.Sink(sink, minimumLevel));
        }