/// <summary>
        ///     Returns a <see cref="ICacheLogger{T}" /> for the specified logger.
        /// </summary>
        /// <typeparam name="T">The type of generic logger.</typeparam>
        /// <param name="logger">The source logger.</param>
        /// <returns>The cache logger.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="logger" /> is <c>null</c>.</exception>
        public static ICacheLogger <T> WithCache <T>(this ILogger <T> logger)
        {
            logger = logger ?? throw new ArgumentNullException(nameof(logger));

            var cacheLogger = new CacheLogger <T>(logger);

            return(cacheLogger);
        }
        internal static ICacheLogger <T> WithCache <T>(this ILogger <T> logger, ILoggerFactory factory)
        {
            var cacheLogger = new CacheLogger <T>(logger, factory);

            return(cacheLogger);
        }
        internal static ICacheLogger WithCache(this ILogger logger, ILoggerFactory factory)
        {
            var cacheLogger = new CacheLogger(logger, factory);

            return(cacheLogger);
        }