Exemple #1
0
        private static ILoggerFactory GetNLogLoggerFactory()
        {
            LoggingConfiguration loggerConfig = new NLog.Config.LoggingConfiguration();
            FileTarget           fileTarget   = new NLog.Targets.FileTarget()
            {
                Name     = "logfile",
                FileName = "log.txt",
                Layout   = "${longdate}|${level:uppercase=true}|${logger}|${event-context:item=EventId}|${message}|${ndc}"
            };

            loggerConfig.AddTarget(fileTarget);
            loggerConfig.LoggingRules.Add(new NLog.Config.LoggingRule("*", NLog.LogLevel.Info, fileTarget));
            //NLogLoggerFactory test = new NLogLoggerFactory(new NLogLoggerProvider(new NLogProviderOptions()));
            NLogLoggerFactory   logLoggerFactory = new NLogLoggerFactory();
            NLogProviderOptions op = new NLogProviderOptions
            {
                CaptureMessageProperties = true,
                CaptureMessageTemplates  = true,
                EventIdSeparator         = "|",
                IgnoreEmptyEventId       = false,
                IncludeScopes            = true,
                //ParseMessageTemplates = true
                //ShutdownOnDispose = true
            };

            NLogLoggerProvider p = new NLogLoggerProvider(op, loggerConfig.LogFactory);

            logLoggerFactory.AddProvider(p);
            return(logLoggerFactory);
            //loggerFactory.AddNLog(new NLog.LogFactory(loggerConfig));
        }
Exemple #2
0
        public static void AddLog(this IServiceCollection services)
        {
            services.AddLogging((builder) => builder.SetMinimumLevel(LogLevel.Trace));
            services.AddScoped(typeof(ILogger <>), typeof(Logger <>));
            services.AddSingleton <ILoggerFactory>(p =>
            {
                var factory = new LoggerFactory();

                var options = new NLogProviderOptions
                {
                    CaptureMessageTemplates  = true,
                    CaptureMessageProperties = true
                };
                factory.AddNLog(options);

                var config = new LoggingConfiguration();

                var target      = new FileTarget("application");
                target.FileName = Path.Combine(p.GetService <Storage>().LogDirectory, "application.log");
                config.AddTarget(target);

                var rule = new LoggingRule("*", NLog.LogLevel.Debug, target);
                config.LoggingRules.Add(rule);
                factory.ConfigureNLog(config);

                return(factory);
            });
        }
Exemple #3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env,
                              ILoggerFactory loggerFactory, SchoolContext context)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug((category, logLevel) =>
                                   { return(category.StartsWith("Microsoft.EntityFrameworkCore")); });

            NLogProviderOptions options = new NLogProviderOptions();

            loggerFactory.AddNLog(options);
            //loggerFactory.CreateLogger("Microsoft.EntityFrameworkCore");

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
            SchoolInitializer.Initialize(context);
        }
Exemple #4
0
        protected T GetRunner <T>(NLogProviderOptions options = null) where T : class
        {
            // Start program
            var runner = ConfigureTransientService <T>(null, options).GetRequiredService <T>();

            return(runner);
        }
        /// <summary>
        /// Enable NLog as logging provider in .NET Core.
        /// </summary>
        /// <param name="factory"></param>
        /// <param name="options">NLog options</param>
        /// <returns>ILoggerFactory for chaining</returns>
        public static ILoggerFactory AddNLog(this ILoggerFactory factory, NLogProviderOptions options)
        {
            //ignore this
            LogManager.AddHiddenAssembly(Assembly.Load(new AssemblyName("Microsoft.Extensions.Logging")));
            LogManager.AddHiddenAssembly(Assembly.Load(new AssemblyName("Microsoft.Extensions.Logging.Abstractions")));

            try
            {
                //try the Filter ext
                var filterAssembly = Assembly.Load(new AssemblyName("Microsoft.Extensions.Logging.Filter"));
                LogManager.AddHiddenAssembly(filterAssembly);
            }
            catch (Exception)
            {
                //ignore
            }

            LogManager.AddHiddenAssembly(typeof(ConfigureExtensions).GetTypeInfo().Assembly);

            using (var provider = new NLogLoggerProvider(options))
            {
                factory.AddProvider(provider);
            }
            return(factory);
        }
        private CustomLoggerPropertyTestRunner GetRunner(NLogProviderOptions options = null)
        {
            SetupTestRunner <CustomLoggerPropertyTestRunner>(typeof(SameAssemblyLogger <>), options);
            var runner = GetRunner <CustomLoggerPropertyTestRunner>();

            return(runner);
        }
Exemple #7
0
        /// <summary>
        ///     Enable and configure NLog as a logging provider for buildable generic host (.NET Core 2.1+).
        ///     Can be used in discrete containers as well.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">NLogProviderOptions object to configure NLog behavior</param>
        /// <returns>IHostBuilder for chaining</returns>
        public static IHostBuilder UseNLog(this IHostBuilder builder, NLogProviderOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.ConfigureServices((hostbuilder, services) =>
            {
                ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(ConfigureExtensions).GetTypeInfo()
                                                                           .Assembly);

                services.AddSingleton <ILoggerProvider>(serviceProvider =>
                {
                    var provider = new NLogLoggerProvider(options ?? new NLogProviderOptions());
                    if (hostbuilder.Configuration != null)
                    {
                        ConfigSettingLayoutRenderer.DefaultConfiguration = hostbuilder.Configuration;
                        if (options == null)
                        {
                            provider.Configure(hostbuilder.Configuration.GetSection("Logging:NLog"));
                        }
                    }
                    return(provider);
                });
            });

            return(builder);
        }
Exemple #8
0
        /// <summary>
        /// 初始化 Console 应用。
        /// 项目下必须包含 appsettings.json 和 nlog.config 文件。
        /// </summary>
        /// <param name="setup"></param>
        public static void Init(Action <IConfiguration, ServiceCollection> setup)
        {
            // 1、Load Configurations
            // Console App 没有 ASPNETCORE_ENVIRONMENT 变量
            // var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            Configuration = new ConfigurationBuilder()
                            //.SetBasePath(Directory.GetCurrentDirectory())
                            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                            .AddJsonFile("appsettings.json", optional: false)
                            //.AddJsonFile($"appsettings.{envName}.json", optional: true)
                            .Build();

            // 2、Build IoC Services
            var services = new ServiceCollection();

            services.AddSingleton(Configuration);
            services.AddLogging(b => b.AddConfiguration(Configuration.GetSection("Logging")));
            setup(Configuration, services);
            ServiceProvider = services.BuildServiceProvider();

            // 3、Config Logging
            var loggerFactory = ServiceProvider.GetRequiredService <ILoggerFactory>();
            var nlogOptions   = new NLogProviderOptions
            {
                CaptureMessageTemplates  = true,
                CaptureMessageProperties = true
            };

            loggerFactory.AddConsole(); // LogLevel.Debug
            loggerFactory.AddNLog(nlogOptions);
            NLog.LogManager.LoadConfiguration("nlog.config");
        }
Exemple #9
0
        public void UseNLog_withOptionsParam_WorksWithNLog()
        {
            var someParam = new NLogProviderOptions {
                CaptureMessageProperties = false, CaptureMessageTemplates = false
            };
            var actual = new HostBuilder().UseNLog(someParam).Build();

            TestHostingResult(actual, true);
        }
 /// <summary>
 ///     Enable and configure NLog as a logging provider for buildable generic host (.NET Core 2.1+).
 ///     Can be used in discrete containers as well.
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="options">NLogProviderOptions object to configure NLog behavior</param>
 /// <returns>IHostBuilder for chaining</returns>
 public static IHostBuilder UseNLog(this IHostBuilder builder, NLogProviderOptions options)
 {
     if (builder == null)
     {
         throw new ArgumentNullException(nameof(builder));
     }
     builder.ConfigureServices((builderContext, services) => AddNLogLoggerProvider(services, builderContext.Configuration, builderContext.HostingEnvironment, options, CreateNLogLoggerProvider));
     return(builder);
 }
Exemple #11
0
 /// <summary>
 /// Enable NLog as logging provider in .NET Core.
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="options">NLog options</param>
 /// <returns>ILoggerFactory for chaining</returns>
 public static ILoggingBuilder AddNLog(this ILoggingBuilder factory, NLogProviderOptions options)
 {
     Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
     using (var provider = new NLogLoggerProvider(options))
     {
         factory.AddProvider(provider);
     }
     return(factory);
 }
Exemple #12
0
        /// <summary>
        /// adds NLog to the logger factory
        /// </summary>
        /// <param name="loggerFactory">logger factory</param>
        /// <param name="configFilePath">the path to the config (if none is given, NLog will search for it)</param>
        public static void AddNLog(this ILoggerFactory loggerFactory, string configFilePath = null)
        {
            // register target class
            ConfigurationItemFactory.Default.Targets.RegisterDefinition("AppCenter", typeof(AppCenterTarget));
            LogManager.Configuration = new XmlLoggingConfiguration(configFilePath);
            var options      = new NLogProviderOptions();
            var nlogProvider = new NLogLoggerProvider(options);

            loggerFactory.AddProvider(nlogProvider);
        }
        private NLogProviderOptions GetDefaultOptions()
        {
            NLogProviderOptions options = new NLogProviderOptions();

            options.CaptureMessageProperties = true;
            options.CaptureMessageTemplates  = true;
            options.EventIdSeparator         = ".";
            options.IgnoreEmptyEventId       = true;
            return(options);
        }
Exemple #14
0
        public static ILoggerFactory CreateLogging()
        {
            var options = new NLogProviderOptions {
                CaptureMessageTemplates = true, CaptureMessageProperties = true
            };
            var loggerFactory = new LoggerFactory().AddNLog(options);

            loggerFactory.ConfigureNLog("nlog.config");

            return(loggerFactory);
        }
Exemple #15
0
        public void UseNLog_withOptionsParam_buildsAndExposesValidIServiceCollection()
        {
            var someParam = new NLogProviderOptions {
                CaptureMessageProperties = false, CaptureMessageTemplates = false
            };

            var actual       = new HostBuilder().UseNLog(someParam).Build();
            var serviceCount = actual.Services.GetServices <ILoggerFactory>().Count();

            Assert.NotNull(actual);
            Assert.Equal(2, serviceCount);
        }
Exemple #16
0
        public void UseNLog_withConfiguration_WorksWithNLog()
        {
            var memoryConfig = new Dictionary <string, string>();

            memoryConfig["NLog:CaptureMessageProperties"] = "true";
            memoryConfig["NLog:CaptureMessageTemplates"]  = "false";
            memoryConfig["NLog:IgnoreScopes"]             = "false";

            var someParam = new NLogProviderOptions {
                CaptureMessageProperties = false, CaptureMessageTemplates = false
            };
            var actual = new HostBuilder().ConfigureHostConfiguration(config => config.AddInMemoryCollection(memoryConfig)).UseNLog(someParam).Build();

            TestHostingResult(actual, true);
        }
        public void TestExtraMessagePropertySayHi()
        {
            var options = new NLogProviderOptions {
                CaptureMessageTemplates = false
            };
            var runner = GetRunner(options);
            var target = CreateMemoryTarget();

            ConfigureNLog(target);

            runner.SayHigh5();

            Assert.Single(target.Logs);
            Assert.Equal(@"Hi 5|ActivityId=42, 0=5", target.Logs[0]);
        }
Exemple #18
0
        /// <summary>
        ///     Enable and configure NLog as a logging provider for buildable generic host (.NET Core 2.1+).
        ///     Can be used in discrete containers as well.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">NLogProviderOptions object to configure NLog behavior</param>
        /// <returns>IHostBuilder for chaining</returns>
        public static IHostBuilder UseNLog(this IHostBuilder builder, NLogProviderOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

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

                services.AddSingleton(new LoggerFactory().AddNLog(options));
            });

            return(builder);
        }
Exemple #19
0
        public void AddNLog_withShutdownOnDispose_worksWithNLog()
        {
            var someParam = new NLogProviderOptions {
                ShutdownOnDispose = true
            };
            var actual = new HostBuilder().ConfigureLogging(l => l.AddNLog(someParam)).Build();

            try
            {
                TestHostingResult(actual, false);
                Assert.NotNull(LogManager.Configuration);
            }
            finally
            {
                actual.Dispose();
                Assert.Null(LogManager.Configuration);
            }
        }
        /// <summary>
        /// Add Microsoft.Extensions.Logging and NLog to service collection.
        /// </summary>
        /// <param name="serviceCollection">The service collection to add services to.</param>
        /// <param name="nLogConfigurationPath">The path to the NLog configuration file.</param>
        /// <param name="optionsBuilder">Actions to configure NLog options.</param>
        /// <param name="loggingBuilder">Actions to configure Microsoft.Extensions.Logging.</param>
        /// <returns>The modified service collection.</returns>
        public static IServiceCollection AddNLog(this IServiceCollection serviceCollection,
                                                 string nLogConfigurationPath,
                                                 Action <NLogProviderOptions> optionsBuilder,
                                                 Action <ILoggingBuilder> loggingBuilder)
        {
            if (!string.IsNullOrEmpty(nLogConfigurationPath))
            {
                NLog.LogManager.LoadConfiguration(nLogConfigurationPath);
            }

            return(serviceCollection.AddLogging(builder =>
            {
                loggingBuilder(builder);
                var configuredOptions = new NLogProviderOptions();
                optionsBuilder(configuredOptions);
                builder.AddNLog(configuredOptions);
            }));
        }
Exemple #21
0
 protected NLogLoggerProvider ConfigureLoggerProvider(NLogProviderOptions options = null, Action <ServiceCollection> configureServices = null)
 {
     if (_serviceProvider == null)
     {
         var logFactory = new LogFactory();
         LoggerProvider = new NLogLoggerProvider(options ?? new NLogProviderOptions {
             CaptureMessageTemplates = true, CaptureMessageProperties = true
         }, logFactory);
         var services = new ServiceCollection();
         services.AddSingleton <ILoggerFactory, LoggerFactory>();
         services.AddSingleton(typeof(ILogger <>), typeof(Logger <>));
         configureServices?.Invoke(services);
         _serviceProvider = services.BuildServiceProvider();
         var loggerFactory = _serviceProvider.GetRequiredService <ILoggerFactory>();
         loggerFactory.AddProvider(LoggerProvider);
     }
     return(LoggerProvider);
 }
        public void AddNLog_LoggingBuilder_LogInfoWithEventId_ShouldLogToNLogWithEventId(string eventPropery, string expectedEventInLog)
        {
            // Arrange
            ILoggingBuilder builder = new LoggingBuilderStub();
            var             config  = CreateConfigWithMemoryTarget(out var memoryTarget, $"${{event-properties:{eventPropery}}} - ${{message}}");
            var             options = new NLogProviderOptions {
                EventIdSeparator = "_"
            };

            // Act
            builder.AddNLog(config, options);
            var provider = GetLoggerProvider(builder);
            var logger   = provider.CreateLogger("logger1");

            logger.LogInformation(new EventId(2, "eventId2"), "test message with {0} arg", 1);

            // Assert
            AssertSingleMessage(memoryTarget, $"{expectedEventInLog} - test message with 1 arg");
        }
Exemple #23
0
        public static void LoadNLogConfiguration(IServiceContainer container, IServiceProvider provider, string logConfigurationFile)
        {
            var loggerFactory = provider.GetRequiredService <ILoggerFactory>();
            // post-configure NLog Instance from the service provider
            var options = new NLogProviderOptions
            {
                CaptureMessageTemplates  = true,
                CaptureMessageProperties = true,
            };

            loggerFactory.AddNLog(options);
            if (File.Exists(logConfigurationFile))
            {
                NLog.LogManager.LoadConfiguration(logConfigurationFile);
            }

            container.RegisterInstance <ILoggerFactory>(loggerFactory);
            container.Register(typeof(ILogger <>), typeof(Logger <>), new PerContainerLifetime());
            container.RegisterConstructorDependency((factory, info) => loggerFactory.CreateLogger(info.Member.DeclaringType));
        }
Exemple #24
0
        private static void AddNLogLoggerProvider(IServiceCollection services, IConfiguration configuration, NLogProviderOptions options, Func <IServiceProvider, IConfiguration, NLogProviderOptions, NLogLoggerProvider> factory)
        {
            ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(ConfigureExtensions).GetTypeInfo().Assembly);

            services.TryAddNLogLoggingProvider((svc, addlogging) => svc.AddLogging(addlogging), configuration, options, factory);
        }
        private static NLogLoggerProvider CreateNLogLoggerProvider(IServiceProvider serviceProvider, IConfiguration configuration, IHostEnvironment hostEnvironment, NLogProviderOptions options)
        {
            NLogLoggerProvider provider = new NLogLoggerProvider(options);

            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"));
                provider.TryLoadConfigurationFromSection(configuration);
            }

            var contentRootPath = hostEnvironment?.ContentRootPath;

            if (!string.IsNullOrEmpty(contentRootPath))
            {
                TryLoadConfigurationFromContentRootPath(provider.LogFactory, contentRootPath);
            }

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

            return(provider);
        }
 private static void AddNLogLoggerProvider(IServiceCollection services, IConfiguration configuration, IHostEnvironment hostEnvironment, NLogProviderOptions options, Func <IServiceProvider, IConfiguration, IHostEnvironment, NLogProviderOptions, NLogLoggerProvider> factory)
 {
     ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(ConfigureExtensions).GetTypeInfo().Assembly);
     LogManager.AddHiddenAssembly(typeof(ConfigureExtensions).GetTypeInfo().Assembly);
     services.TryAddNLogLoggingProvider((svc, addlogging) => svc.AddLogging(addlogging), configuration, options, (provider, cfg, opt) => factory(provider, cfg, hostEnvironment, opt));
 }
 /// <summary>
 /// New provider with options
 /// </summary>
 /// <param name="options"></param>
 public NLogLoggerProvider(NLogProviderOptions options)
 {
     Options = options;
 }
Exemple #28
0
        private static NLogLoggerProvider CreateNLogLoggerProvider(IServiceProvider serviceProvider, IConfiguration configuration, NLogProviderOptions options)
        {
            configuration = SetupConfiguration(serviceProvider, configuration);
            NLogLoggerProvider provider = new NLogLoggerProvider(options);

            if (configuration != null && options == null)
            {
                provider.Configure(configuration.GetSection("Logging:NLog"));
            }
            return(provider);
        }
Exemple #29
0
 protected void SetupTestRunner <TRunner>(Type implType, NLogProviderOptions options = null) where TRunner : class
 {
     ConfigureTransientService <TRunner>(s => s.AddSingleton(typeof(ILogger <>), implType), options);
 }
Exemple #30
0
 protected IServiceProvider ConfigureTransientService <T>(Action <ServiceCollection> configureServices = null, NLogProviderOptions options = null) where T : class
 {
     if (_serviceProvider == null)
     {
         ConfigureLoggerProvider(options, s => { s.AddTransient <T>(); configureServices?.Invoke(s); });
     }
     return(_serviceProvider);
 }