Exemplo n.º 1
0
        private static void ConfigureServicesNLog(NLogAspNetCoreOptions options, IServiceCollection services, Func <IServiceProvider, IConfiguration> lookupConfiguration)
        {
            ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);
            LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);

            services.AddSingleton <ILoggerProvider>(serviceProvider =>
            {
                ServiceLocator.ServiceProvider = serviceProvider;

                var provider      = new NLogLoggerProvider(options ?? new NLogProviderOptions());
                var configuration = lookupConfiguration(serviceProvider);
                if (configuration != null)
                {
                    ConfigSettingLayoutRenderer.DefaultConfiguration = configuration;
                    if (options == null)
                    {
                        provider.Configure(configuration.GetSection("Logging:NLog"));
                    }
                }

                return(provider);
            });

            //note: this one is called before  services.AddSingleton<ILoggerFactory>
            if ((options ?? NLogAspNetCoreOptions.Default).RegisterHttpContextAccessor)
            {
                services.AddHttpContextAccessor();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Use NLog for Dependency Injected loggers.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">Options for logging to NLog with Dependency Injected loggers</param>
        /// <returns></returns>
        public static IWebHostBuilder UseNLog(this IWebHostBuilder builder, NLogAspNetCoreOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            options = options ?? NLogAspNetCoreOptions.Default;

            builder.ConfigureServices(services =>
            {
                services.AddSingleton <ILoggerFactory>(serviceProvider =>
                {
                    ServiceLocator.ServiceProvider = serviceProvider;

                    NLogBuilder.RegisterNLogWebAspNetCore();

                    LogManager.Configuration?.Reload();
                    return(new NLogLoggerFactory(options));
                });
                //note: this one is called before  services.AddSingleton<ILoggerFactory>
                if (options.RegisterHttpContextAccessor)
                {
                    services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();
                }
            });
            return(builder);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Use NLog for Dependency Injected loggers.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">Options for logging to NLog with Dependency Injected loggers</param>
        /// <returns></returns>
        public static IWebHostBuilder UseNLog(this IWebHostBuilder builder, NLogAspNetCoreOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            options = options ?? NLogAspNetCoreOptions.Default;

            builder.ConfigureServices(services =>
            {
                ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);
                LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);

                //note: when registering ILoggerFactory, all non NLog stuff and stuff before this will be removed
                services.AddSingleton <ILoggerProvider>(serviceProvider =>
                {
                    ServiceLocator.ServiceProvider = serviceProvider;
                    return(new NLogLoggerProvider(options));
                });

                //note: this one is called before  services.AddSingleton<ILoggerFactory>
                if (options.RegisterHttpContextAccessor)
                {
                    services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();
                }
            });
            return(builder);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Enable NLog as logging provider for Microsoft Extension Logging
 /// </summary>
 /// <param name="builder">The logging builder</param>
 /// <param name="options">Options for registration of the NLog LoggingProvider and enabling features.</param>
 public static ILoggingBuilder AddNLogWeb(this ILoggingBuilder builder, NLogAspNetCoreOptions options)
 {
     AddNLogLoggerProvider(builder.Services, null, options, (serviceProvider, config, opt) =>
     {
         return(CreateNLogLoggerProvider(serviceProvider, config, opt));
     });
     return(builder);
 }
Exemplo n.º 5
0
        /// <summary>
        /// Use NLog for Dependency Injected loggers.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">Options for registration of the NLog LoggingProvider and enabling features.</param>
        public static IHostBuilder UseNLog(this IHostBuilder builder, NLogAspNetCoreOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.ConfigureServices((builderContext, services) => AddNLogLoggerProvider(services, builderContext.Configuration, options, CreateNLogLoggerProvider));
            return(builder);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Use NLog for Dependency Injected loggers.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">Options for logging to NLog with Dependency Injected loggers</param>
        /// <returns></returns>
        public static IHostBuilder UseNLog(this IHostBuilder builder, NLogAspNetCoreOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.ConfigureServices((hostbuilder, services) => { ConfigureServicesNLog(options, services, serviceProvider => hostbuilder.Configuration); });
            return(builder);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Use NLog for Dependency Injected loggers.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">Options for logging to NLog with Dependency Injected loggers</param>
        /// <returns></returns>
        public static IWebHostBuilder UseNLog(this IWebHostBuilder builder, NLogAspNetCoreOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.ConfigureServices(services => { ConfigureServicesNLog(options, services, serviceProvider => serviceProvider.GetService <IConfiguration>()); });
            return(builder);
        }
Exemplo n.º 8
0
        private static NLogLoggerProvider CreateNLogLoggerProvider(IServiceProvider serviceProvider, IConfiguration configuration, NLogAspNetCoreOptions options, NLog.LogFactory logFactory)
        {
            configuration = SetupConfiguration(serviceProvider, configuration);
            NLogLoggerProvider provider = new NLogLoggerProvider(options ?? NLogAspNetCoreOptions.Default, logFactory ?? LogManager.LogFactory);

            if (configuration != null && options == null)
            {
                provider.Configure(configuration.GetSection("Logging:NLog"));
            }
            return(provider);
        }
Exemplo n.º 9
0
 private static NLogLoggerProvider CreateNLogLoggerProvider(IServiceProvider serviceProvider, IConfiguration configuration, NLogAspNetCoreOptions options)
 {
     return(CreateNLogLoggerProvider(serviceProvider, configuration, options, null));
 }
Exemplo n.º 10
0
        private static void AddNLogLoggerProvider(IServiceCollection services, IConfiguration configuration, NLogAspNetCoreOptions options, Func <IServiceProvider, IConfiguration, NLogAspNetCoreOptions, NLogLoggerProvider> factory)
        {
            ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);
            LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);

            var sharedFactory = factory;

            if ((options ?? NLogAspNetCoreOptions.Default).ReplaceLoggerFactory)
            {
                NLogLoggerProvider singleInstance = null;   // Ensure that registration of ILoggerFactory and ILoggerProvider shares the same single instance
                sharedFactory = (provider, cfg, opt) => singleInstance ?? (singleInstance = factory(provider, cfg, opt));

                services.AddLogging(builder => builder?.ClearProviders());  // Cleanup the existing LoggerFactory, before replacing it with NLogLoggerFactory
                services.Replace(ServiceDescriptor.Singleton <ILoggerFactory, NLogLoggerFactory>(serviceProvider => new NLogLoggerFactory(sharedFactory(serviceProvider, configuration, options))));
            }

            services.TryAddEnumerable(ServiceDescriptor.Singleton <ILoggerProvider, NLogLoggerProvider>(serviceProvider => sharedFactory(serviceProvider, configuration, options)));

            if ((options ?? NLogAspNetCoreOptions.Default).RemoveLoggerFactoryFilter)
            {
                // Will forward all messages to NLog if not specifically overridden by user
                services.AddLogging(builder => builder?.AddFilter <NLogLoggerProvider>(null, Microsoft.Extensions.Logging.LogLevel.Trace));
            }

            //note: this one is called before  services.AddSingleton<ILoggerFactory>
            if ((options ?? NLogAspNetCoreOptions.Default).RegisterHttpContextAccessor)
            {
                services.AddHttpContextAccessor();
            }
        }
Exemplo n.º 11
0
 /// <summary>
 /// Configure NLog from API
 /// </summary>
 /// <param name="builder">The logging builder</param>
 /// <param name="logFactory">NLog LogFactory</param>
 /// <param name="options">Options for registration of the NLog LoggingProvider and enabling features.</param>
 public static ILoggingBuilder AddNLogWeb(this ILoggingBuilder builder, LogFactory logFactory, NLogAspNetCoreOptions options)
 {
     AddNLogLoggerProvider(builder.Services, null, options, (serviceProvider, config, opt) =>
     {
         logFactory   = logFactory ?? LogManager.LogFactory;
         var provider = CreateNLogLoggerProvider(serviceProvider, config, opt, logFactory);
         return(provider);
     });
     return(builder);
 }
Exemplo n.º 12
0
 /// <summary>
 /// Configure NLog from API
 /// </summary>
 /// <param name="builder">The logging builder</param>
 /// <param name="configuration">Config for NLog</param>
 /// <param name="options">Options for registration of the NLog LoggingProvider and enabling features.</param>
 public static ILoggingBuilder AddNLogWeb(this ILoggingBuilder builder, LoggingConfiguration configuration, NLogAspNetCoreOptions options)
 {
     AddNLogLoggerProvider(builder.Services, null, options, (serviceProvider, config, opt) =>
     {
         var logFactory = configuration?.LogFactory ?? LogManager.LogFactory;
         var provider   = CreateNLogLoggerProvider(serviceProvider, config, opt, logFactory);
         // Delay initialization of targets until we have loaded config-settings
         logFactory.Configuration = configuration;
         return(provider);
     });
     return(builder);
 }
Exemplo n.º 13
0
 /// <summary>
 /// Configure NLog from API
 /// </summary>
 /// <param name="builder">The logging builder</param>
 /// <param name="configuration">Config for NLog</param>
 /// <param name="options">Options for registration of the NLog LoggingProvider and enabling features.</param>
 public static ILoggingBuilder AddNLog(this ILoggingBuilder builder, LoggingConfiguration configuration, NLogAspNetCoreOptions options)
 {
     return(AddNLogWeb(builder, configuration, options));
 }
Exemplo n.º 14
0
        private static void AddNLogLoggerProvider(IServiceCollection services, IConfiguration configuration, NLogAspNetCoreOptions options, Func <IServiceProvider, IConfiguration, NLogAspNetCoreOptions, NLogLoggerProvider> factory)
        {
            ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);
            LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly);

            services.TryAddEnumerable(ServiceDescriptor.Singleton <ILoggerProvider, NLogLoggerProvider>(serviceProvider => factory(serviceProvider, configuration, options)));

            //note: this one is called before  services.AddSingleton<ILoggerFactory>
            if ((options ?? NLogAspNetCoreOptions.Default).RegisterHttpContextAccessor)
            {
                services.AddHttpContextAccessor();
            }
        }
Exemplo n.º 15
0
        private static NLogLoggerProvider CreateNLogLoggerProvider(IServiceProvider serviceProvider, IConfiguration configuration, NLogAspNetCoreOptions options, NLog.LogFactory logFactory)
        {
            NLogLoggerProvider provider = new NLogLoggerProvider(options ?? NLogAspNetCoreOptions.Default, logFactory ?? LogManager.LogFactory);

            configuration = SetupConfiguration(serviceProvider, configuration);

            if (serviceProvider != null && provider.Options.RegisterServiceProvider)
            {
                provider.LogFactory.ServiceRepository.RegisterService(typeof(IServiceProvider), serviceProvider);
            }

            if (configuration != null)
            {
                provider.Configure(configuration.GetSection("Logging:NLog"));
                TryLoadConfigurationFromSection(provider, configuration);
            }

            if (provider.Options.ShutdownOnDispose)
            {
                provider.LogFactory.AutoShutdown = false;
            }

            return(provider);
        }