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()));
        }
예제 #2
0
        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);
        }