private static LoggerProvider GetLoggerProvider(IServiceProvider serviceProvider, LoggerOptions options) { var loggerConfig = serviceProvider.GetRequiredService <LoggerConfiguration>(); if (options.UseApplicationInsights) { serviceProvider.GetRequiredService <ApplicationInsightsLoggerLogConfigurationAdapter>() .ApplyConfiguration(loggerConfig, options); } if (options.UseActivityLogger) { serviceProvider.GetRequiredService <ActivityLoggerLogConfigurationAdapter>() .ApplyConfiguration(loggerConfig); } return(new LoggerProvider(loggerConfig.CreateLogger())); }
public LoggerConfiguration ApplyConfiguration(LoggerConfiguration loggerConfiguration, LoggerOptions options) { var instrumentationKey = _configuration.GetValue <string>("ApplicationInsights:InstrumentationKey"); return(loggerConfiguration.WithApplicationInsights(instrumentationKey, options.GetUserId)); }
public static ILoggingBuilder AddServiceLogging(this ILoggingBuilder builder, LoggerOptions options = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } options = options ?? new LoggerOptions(); if (options.UseActivityLogger) { builder.Services.AddSingleton(typeof(IActivityLogger <>), typeof(ActivityLogger <>)); } builder.Services.AddSingleton <LoggingLevelSwitch>(); builder.Services.AddTransient <Action <ServiceContext> >(serviceProvider => EnrichLoggerWithContext(serviceProvider)); builder.Services.AddTransient <LoggerConfiguration>(services => GetLoggerConfiguration(services)); builder.Services.AddTransient <ActivityLoggerLogConfigurationAdapter>(); builder.Services.AddTransient <ApplicationInsightsLoggerLogConfigurationAdapter>(); builder.Services.AddSingleton <ILoggerProvider, LoggerProvider>(services => GetLoggerProvider(services, options)); builder.AddFilter <LoggerProvider>(null, LogLevel.Trace); return(builder); }