public static ILoggingBuilder ConfigureLoggingServices(ILoggingBuilder loggingBuilder, IConfiguration configuration) { var nLogConfiguration = new NLog.Config.LoggingConfiguration(); var consoleTarget = AddConsoleTarget(); var databaseTarget = AddDatabaseTarget(configuration); nLogConfiguration.AddRule(NLog.LogLevel.Trace, NLog.LogLevel.Fatal, consoleTarget); nLogConfiguration.AddRule(NLog.LogLevel.Trace, NLog.LogLevel.Fatal, databaseTarget); nLogConfiguration.AddTarget(consoleTarget); nLogConfiguration.AddTarget(databaseTarget); var nLogOptions = new NLogAspNetCoreOptions { RegisterHttpContextAccessor = true, IgnoreEmptyEventId = true, IncludeScopes = true, ShutdownOnDispose = true }; var logFactory = NLogBuilder.ConfigureNLog(nLogConfiguration); logFactory.AutoShutdown = false; var nLogConfig = logFactory.Configuration; loggingBuilder.AddNLog(nLogConfig, nLogOptions); return(loggingBuilder); }
/// <summary> /// 添加NLog日志 /// </summary> /// <param name="register"></param> public static IServiceCollection AddNLog(this IServiceCollection services, NLogAspNetCoreOptions options, bool clearProviders = true) { services.AddLogging(builder => { if (clearProviders) { builder.ClearProviders(); } builder.SetMinimumLevel(LogLevel.Trace); }); options = options ?? NLogAspNetCoreOptions.Default; services.AddSingleton <ILoggerProvider>(serviceProvider => { serviceProvider.SetupNLogServiceLocator(); if (options.RegisterHttpContextAccessor) { LayoutRenderer.Register <WebInfoLayoutRenderer>("webinfo"); WebInfoLayoutRenderer.httpContextAccessor = serviceProvider.GetService <IHttpContextAccessor>(); } return(new NLogLoggerProvider(options)); }); if (options.RegisterHttpContextAccessor) { services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>(); } return(services); }
/// <summary> /// Create webhost with UseNlog /// </summary> /// <returns></returns> private static IWebHost CreateWebHost(NLogAspNetCoreOptions options = null) { var webhost = Microsoft.AspNetCore.WebHost.CreateDefaultBuilder() .Configure(c => c.New()) //.New needed, otherwise: // Unhandled Exception: System.ArgumentException: A valid non-empty application name must be provided. // Parameter name: applicationName .UseNLog(options) //use NLog for ILoggers and pass httpcontext .Build(); return(webhost); }
public static IHostBuilder CreateHostBuilder(string[] args) { NLogAspNetCoreOptions options = new NLogAspNetCoreOptions { IgnoreEmptyEventId = false, CaptureMessageProperties = true }; return(Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup <Startup>(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.SetMinimumLevel(LogLevel.Information); // logging.AddConsole(); }) .UseNLog(options)); }
public static IHostBuilder UseNLog(this IHostBuilder builder, NLogAspNetCoreOptions options) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } options = (options ?? NLogAspNetCoreOptions.Default); builder.ConfigureServices(delegate(IServiceCollection services) { LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); services.AddSingleton((Func <IServiceProvider, ILoggerProvider>) delegate { return(new NLogLoggerProvider(options)); }); 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 => { //note: when registering ILoggerFactory, all non NLog stuff and stuff before this will be removed services.AddSingleton <ILoggerProvider>(serviceProvider => { return(new NLogLoggerProvider(options)); }); //note: this one is called before services.AddSingleton<ILoggerFactory> if (options.RegisterHttpContextAccessor) { services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); } }); return(builder); }
/// <summary> /// Create webhost with UseNlog /// </summary> /// <returns></returns> private static IWebHost CreateWebHost(NLogAspNetCoreOptions options = null) { return(CreateWebHostBuilder() .UseNLog(options) .Build()); }