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(); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
private static NLogLoggerProvider CreateNLogLoggerProvider(IServiceProvider serviceProvider, IConfiguration configuration, NLogAspNetCoreOptions options) { return(CreateNLogLoggerProvider(serviceProvider, configuration, options, null)); }
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(); } }
/// <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); }
/// <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); }
/// <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)); }
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(); } }
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); }