public void AddLoggerMethod3SadPath2()
        {
            var services = new ServiceCollection();

            Logger.ProcessingMode processingMode = (Logger.ProcessingMode) 123;

            Action act = () => services.AddLogger(processingMode: processingMode);

            act.Should().ThrowExactly <ArgumentOutOfRangeException>().WithMessage("*processingMode*");
        }
        public void AddLoggerMethod3SadPath1()
        {
            IServiceCollection services = null;

            Logger.ProcessingMode processingMode = Logger.ProcessingMode.Background;

            Action act = () => services.AddLogger(processingMode: processingMode);

            act.Should().ThrowExactly <ArgumentNullException>().WithMessage("*services*");
        }
Exemple #3
0
        /// <summary>
        /// Adds an <see cref="ILogger"/>, along with its associated services, to the specified
        /// <see cref="IServiceCollection"/>.
        /// </summary>
        /// <param name="services">
        /// The <see cref="IServiceCollection"/> to add the logger to.
        /// </param>
        /// <param name="loggerName">The name of the logger to build.</param>
        /// <param name="configureOptions">
        /// A delegate to configure the <see cref="ILoggerOptions"/> object that is used to configure the
        /// logger.
        /// </param>
        /// <param name="processingMode">A value that indicates how the logger will process logs.</param>
        /// <param name="lifetime">The <see cref="ServiceLifetime"/> of the service.</param>
        /// <returns>
        /// An <see cref="ILoggerBuilder"/> object for adding log providers and context providers.
        /// </returns>
        /// <remarks>
        /// Note that if this method or any of its overloads are called more than once, then the
        /// last call defines the log processor for all.
        /// </remarks>
        public static ILoggerBuilder AddLogger(this IServiceCollection services,
                                               string loggerName = Logger.DefaultName,
                                               Action <ILoggerOptions> configureOptions = null,
                                               Logger.ProcessingMode processingMode     = Logger.ProcessingMode.Background,
                                               ServiceLifetime lifetime = ServiceLifetime.Transient)
        {
            if (services is null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            var builder = new LoggerBuilder(services, loggerName, configureOptions);

            services.SetLogProcessor(processingMode);
            services.Add(new ServiceDescriptor(typeof(ILogger), builder.Build, lifetime));
            services.SetLoggerLookupDescriptor();

            return(builder);
        }
Exemple #4
0
        private static void SetLogProcessor(this IServiceCollection services, Logger.ProcessingMode processingMode)
        {
            ClearLogProcessor(services);
            switch (processingMode)
            {
            case Logger.ProcessingMode.Background:
                services.AddSingleton <ILogProcessor, BackgroundLogProcessor>();
                break;

            case Logger.ProcessingMode.Synchronous:
                services.AddSingleton <ILogProcessor, SynchronousLogProcessor>();
                break;

            case Logger.ProcessingMode.FireAndForget:
                services.AddSingleton <ILogProcessor, FireAndForgetLogProcessor>();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(processingMode));
            }
        }