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*"); }
/// <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); }
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)); } }