示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        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);
 }
示例#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 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);
        }
示例#7
0
 /// <summary>
 /// Create webhost with UseNlog
 /// </summary>
 /// <returns></returns>
 private static IWebHost CreateWebHost(NLogAspNetCoreOptions options = null)
 {
     return(CreateWebHostBuilder()
            .UseNLog(options)
            .Build());
 }