예제 #1
0
        private static Microsoft.Extensions.Logging.ILogger GetLogger()
        {
            var providers = new LoggerProviderCollection();

            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .WriteTo.Console()
                         .WriteTo.Providers(providers)
                         .CreateLogger();

            var services = new ServiceCollection();

            services.AddSingleton(providers);
            services.AddSingleton <ILoggerFactory>(sc =>
            {
                var providerCollection = sc.GetService <LoggerProviderCollection>();
                var factory            = new SerilogLoggerFactory(null, true, providerCollection);

                foreach (var provider in sc.GetServices <ILoggerProvider>())
                {
                    factory.AddProvider(provider);
                }

                return(factory);
            });

            services.AddLogging(l => l.AddConsole());

            var serviceProvider = services.BuildServiceProvider();
            var logger          = serviceProvider.GetRequiredService <Microsoft.Extensions.Logging.ILogger <Program> >();

            return(logger);
        }
예제 #2
0
 public static IServiceCollection ConfigureLogger(this IServiceCollection serviceCollection, CloudStorageAccount storage)
 {
     return(serviceCollection.AddSingleton(x =>
     {
         return new LoggerFactory().AddSerilog(SerilogLoggerFactory.Create(storage));
     }));
 }
예제 #3
0
        private void InitializeENode(ContainerBuilder builder)
        {
            var assemblies = new[]
            {
                Assembly.Load("Forum.Commands"),
                Assembly.Load("Forum.QueryServices"),
                Assembly.Load("Forum.QueryServices.Dapper"),
                Assembly.Load("Forum.Web")
            };
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode", minimumLevel: Serilog.Events.LogEventLevel.Debug);

            ECommon.Configurations.Configuration
            .Create()
            .UseAutofac(builder)
            .RegisterCommonComponents()
            .UseSerilog(loggerFactory)
            .UseJsonNet()
            .RegisterUnhandledExceptionHandler()
            .CreateENode()
            .RegisterENodeComponents()
            .RegisterBusinessComponents(assemblies)
            .UseEQueue();
        }
예제 #4
0
        public void LoggerMessage_IsCorrect(string name, Action <Microsoft.Extensions.Logging.ILogger> logAction, string method, string expectedResult)
        {
            global::Serilog.ILogger newLogger = new LoggerConfiguration()
                                                .MinimumLevel.Verbose()
                                                .WriteTo.InMemory()
                                                .CreateLogger();
            Log.Logger = newLogger;

            ILoggerFactory loggerFactory = new SerilogLoggerFactory();

            Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger("test");

            logger.Here(logAction);
            var result = InMemorySink.Instance.LogEvents.First().RenderMessage();

            TestContext.WriteLine($"Method: {method} Template: {InMemorySink.Instance.LogEvents.First().MessageTemplate} Render: {InMemorySink.Instance.LogEvents.First().RenderMessage()}");

            var templateFile = Path.Combine(TestContext.CurrentContext.TestDirectory, "templates.txt");

            File.AppendAllLines(templateFile, new string[]
            {
                $"<tr><td>{method}</td><td>{InMemorySink.Instance.LogEvents.First().RenderMessage()}</td></tr>"
            });

            newLogger = null;
            Log.CloseAndFlush();
            InMemorySink.Instance.Dispose();

            Assert.AreEqual(expectedResult, result);
        }
        // Workaround from following GitHub issue on Serilog Sink.
        //       https://github.com/serilog/serilog-sinks-applicationinsights/issues/121
        public static IServiceCollection SetupSerilog(this IServiceCollection collection, Action <IServiceProvider, LoggerConfiguration> configureLogger)
        {
            var loggerConfiguration = new LoggerConfiguration();

            configureLogger(collection.BuildServiceProvider(), loggerConfiguration);

            Logger logger = loggerConfiguration.CreateLogger();

            Log.Logger = logger;

            collection.AddSingleton <ILoggerFactory>(services =>
            {
                var factory = new SerilogLoggerFactory(null, true);

                return(factory);
            });

            var diagnosticContext = new DiagnosticContext(null);

            collection.AddSingleton(diagnosticContext);

            collection.AddSingleton <IDiagnosticContext>(diagnosticContext);

            return(collection);
        }
        private static void ConfigureCompositionRoot(
            string connectionString,
            IExecutionContextAccessor executionContextAccessor,
            ILogger logger,
            IEventsBus eventsBus,
            bool runQuartz = true)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterModule(new LoggingModule(logger));

            var loggerFactory = new SerilogLoggerFactory(logger);

            containerBuilder.RegisterModule(new DataAccessModule(connectionString, loggerFactory));

            containerBuilder.RegisterModule(new ProcessingModule());
            containerBuilder.RegisterModule(new EventsBusModule(eventsBus));
            containerBuilder.RegisterModule(new MediatorModule());
            containerBuilder.RegisterModule(new AuthenticationModule());
            containerBuilder.RegisterModule(new OutboxModule());

            if (runQuartz)
            {
                containerBuilder.RegisterModule(new QuartzModule());
            }

            containerBuilder.RegisterInstance(executionContextAccessor);

            _container = containerBuilder.Build();

            PaymentsCompositionRoot.SetContainer(_container);

            RunEventsProjectors();
        }
예제 #7
0
        private static void InitializeEQueue()
        {
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode");

            ECommonConfiguration
            .Create()
            .UseAutofac()
            .RegisterCommonComponents()
            .UseSerilog(loggerFactory)
            .UseJsonNet()
            .RegisterUnhandledExceptionHandler()
            .RegisterEQueueComponents()
            .BuildContainer();

            var storePath           = ConfigurationManager.AppSettings["equeueStorePath"];
            var nameServerEndpoint  = new IPEndPoint(IPAddress.Loopback, ConfigSettings.NameServerPort);
            var nameServerEndpoints = new List <IPEndPoint> {
                nameServerEndpoint
            };
            var brokerSetting = new BrokerSetting(false, storePath)
            {
                NameServerList = nameServerEndpoints
            };

            brokerSetting.BrokerInfo.ProducerAddress = new IPEndPoint(IPAddress.Loopback, ConfigSettings.BrokerProducerPort).ToAddress();
            brokerSetting.BrokerInfo.ConsumerAddress = new IPEndPoint(IPAddress.Loopback, ConfigSettings.BrokerConsumerPort).ToAddress();
            brokerSetting.BrokerInfo.AdminAddress    = new IPEndPoint(IPAddress.Loopback, ConfigSettings.BrokerAdminPort).ToAddress();
            _broker = BrokerController.Create(brokerSetting);
            ObjectContainer.Resolve <ILoggerFactory>().Create(typeof(Bootstrap).FullName).Info("Broker initialized.");
        }
예제 #8
0
        static void InitializeENodeFramework()
        {
            var assemblies = new[]
            {
                Assembly.Load("NoteSample.Domain"),
                Assembly.Load("NoteSample.Commands"),
                Assembly.Load("NoteSample.CommandHandlers"),
                Assembly.GetExecutingAssembly()
            };
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode");

            _configuration = ECommonConfiguration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseSerilog(loggerFactory)
                             .UseJsonNet()
                             .RegisterUnhandledExceptionHandler()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .BuildContainer()
                             .InitializeBusinessAssemblies(assemblies);
            _eventService = ObjectContainer.Resolve <IEventCommittingService>();

            _logger           = ObjectContainer.Resolve <ILoggerFactory>().Create("main");
            _repository       = ObjectContainer.Resolve <IRepository>();
            _commandProcessor = ObjectContainer.Resolve <ICommandProcessor>();

            Console.WriteLine("ENode started...");
        }
예제 #9
0
 public SerilogTypedLogger(Serilog.ILogger logger)
 {
     using (var logfactory = new SerilogLoggerFactory(logger))
     {
         this.logger = logfactory.CreateLogger(typeof(T).FullName);
     }
 }
        //This method makes a service provider which contains all the dependencies of the runner
        public IServiceProvider Build()
        {
            var providers = new LoggerProviderCollection();

            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .WriteTo.MongoDB(Environment.GetEnvironmentVariable("MP_CONNECTIONSTRING") + "/" + Environment.GetEnvironmentVariable("MP_DATABASE"),
                                          collectionName: Environment.GetEnvironmentVariable("MP_LOGCOLLECTION"))
                         .WriteTo.Providers(providers)
                         .CreateLogger();

            var container = new ServiceCollection();

            container.AddSingleton <IApp, App>();
            container.AddSingleton <IMessageBroker, RabbitBroker>();
            container.AddSingleton <IMessageBrokerConfig, RabbitMQConfig>();
            container.AddSingleton <IDockerService, DockerService>();
            container.AddSingleton(providers);
            container.AddSingleton <ILoggerFactory>(sc => {
                var providerCollection = sc.GetService <LoggerProviderCollection>();
                var factory            = new SerilogLoggerFactory(null, true, providerCollection);

                foreach (var provider in sc.GetServices <ILoggerProvider>())
                {
                    factory.AddProvider(provider);
                }

                return(factory);
            });
            container.AddLogging();
            return(container.BuildServiceProvider());
        }
예제 #11
0
        public static async Task Main(string[] args)
        {
            Log.Logger = SerilogLoggerFactory.CreateLogger();

            try
            {
                Log.Information($"Starting ratesApi. Environment: '{EnvironmentHelpers.GetEnvironmentName()}'");

                var host = CreateHostBuilder(args).Build();

                using (var scope = host.Services.CreateScope())
                {
                    var context = scope.ServiceProvider.GetRequiredService <RatesDataContext>();
                    await context.Database.MigrateAsync();
                }

                await host.RunAsync();
            }
            catch (Exception exc)
            {
                Log.Fatal(exc, "Error during ratesApi startup.");
                throw;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }
예제 #12
0
        public static IHost CreateHostBuilder(string[] args)
        {
            Log.Logger = SetupSerilog(Configuration);

            // Build the host
            var host = MsHost.CreateDefaultBuilder(args)
                       .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                       .ConfigureLogging(SetupLogging)
                       .UseSerilog(dispose: true)
                       .ConfigureWebHostDefaults(wb => wb
                                                 .UseStartup <Startup>(hostingContext =>
            {
                hostingContext.Configuration = Configuration;
                var startupLogger            = new SerilogLoggerFactory(Log.Logger).CreateLogger("File");
                return(new Startup(hostingContext, startupLogger));
            }))
                       .Build();

            // At this stage - after ConfigureServices & ConfigureContainer have been called - we can access IServiceProvider.
            var appContext        = host.Services.GetRequiredService <IApplicationContext>();
            var providerContainer = (appContext as IServiceProviderContainer)
                                    ?? throw new ApplicationException($"The implementation of '${nameof(IApplicationContext)}' must also implement '${nameof(IServiceProviderContainer)}'.");

            providerContainer.ApplicationServices = host.Services;

            // At this stage we can set the scoped service container.
            var engine = host.Services.GetRequiredService <IEngine>();

            engine.Scope = new ScopedServiceContainer(
                host.Services.GetRequiredService <ILifetimeScopeAccessor>(),
                host.Services.GetRequiredService <IHttpContextAccessor>(),
                host.Services.AsLifetimeScope());

            return(host);
        }
예제 #13
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var providers = new LoggerProviderCollection();

            Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).CreateLogger();

            ConfigureCors(services);
            ConfigureSwagger(services);

            services.AddSingleton(providers);
            services.AddSingleton <ILoggerFactory>(sc =>
            {
                var providerCollection = sc.GetService <LoggerProviderCollection>();
                var factory            = new SerilogLoggerFactory(null, true, providerCollection);

                foreach (var provider in sc.GetServices <ILoggerProvider>())
                {
                    factory.AddProvider(provider);
                }

                return(factory);
            });

            services.AddControllers();

            ConfigureDatabase(services);
            ConfigureCustomServices(services);
        }
예제 #14
0
        private void InitializeENode(
            bool useMockEventStore                  = false,
            bool useMockPublishedVersionStore       = false,
            bool useMockDomainEventPublisher        = false,
            bool useMockApplicationMessagePublisher = false,
            bool useMockDomainExceptionPublisher    = false)
        {
            var connectionString = ConfigurationManager.AppSettings["connectionString"];
            var assemblies       = new[]
            {
                Assembly.GetExecutingAssembly()
            };

            if (_serilogLoggerFactory == null)
            {
                _serilogLoggerFactory = new SerilogLoggerFactory(defaultLoggerFileName: "logs\\default")
                                        .AddFileLogger("ECommon", "logs\\ecommon")
                                        .AddFileLogger("EQueue", "logs\\equeue")
                                        .AddFileLogger("ENode", "logs\\enode");
            }
            _enodeConfiguration = ECommonConfiguration
                                  .Create()
                                  .UseAutofac()
                                  .RegisterCommonComponents()
                                  .UseSerilog(_serilogLoggerFactory)
                                  .UseJsonNet()
                                  .RegisterUnhandledExceptionHandler()
                                  .CreateENode()
                                  .RegisterENodeComponents()
                                  .UseEventStore(useMockEventStore)
                                  .UsePublishedVersionStore(useMockPublishedVersionStore)
                                  .RegisterBusinessComponents(assemblies)
                                  .InitializeEQueue()
                                  .UseEQueue(useMockDomainEventPublisher, useMockApplicationMessagePublisher, useMockDomainExceptionPublisher)
                                  .BuildContainer();

            if (!useMockEventStore)
            {
                _enodeConfiguration.InitializeSqlServerEventStore(connectionString);
            }
            if (!useMockPublishedVersionStore)
            {
                _enodeConfiguration.InitializeSqlServerPublishedVersionStore(connectionString);
            }

            _enodeConfiguration
            .InitializeBusinessAssemblies(assemblies)
            .StartEQueue()
            .Start();

            _commandService              = ObjectContainer.Resolve <ICommandService>();
            _memoryCache                 = ObjectContainer.Resolve <IMemoryCache>();
            _eventStore                  = ObjectContainer.Resolve <IEventStore>();
            _publishedVersionStore       = ObjectContainer.Resolve <IPublishedVersionStore>();
            _domainEventPublisher        = ObjectContainer.Resolve <IMessagePublisher <DomainEventStreamMessage> >();
            _applicationMessagePublisher = ObjectContainer.Resolve <IMessagePublisher <IApplicationMessage> >();
            _domainExceptionPublisher    = ObjectContainer.Resolve <IMessagePublisher <IDomainException> >();
            _logger = ObjectContainer.Resolve <ILoggerFactory>().Create(typeof(BaseTest));
            _logger.Info("----ENode initialized.");
        }
예제 #15
0
        private static void ConfigureLogging(HttpConfiguration httpConfig, IConfiguration appConfiguration)
        {
            var logFolder        = HostingEnvironment.MapPath("/Logs");
            var apiLoggerFactory = new SerilogLoggerFactory(new LoggerConfiguration()
                                                            .Enrich.With <UtcTimeLogEventEnricher>()
                                                            .Enrich.WithHttpRequestType()
                                                            .Enrich.WithHttpRequestClientHostIP()
                                                            .Enrich.WithHttpRequestClientHostName()
                                                            .Enrich.WithHttpRequestRawUrl()
                                                            .Enrich.WithWebApiControllerName()
                                                            .Enrich.WithWebApiActionName()
                                                            .WriteTo.Async(a =>
                                                                           a.File(Path.Combine(logFolder, $"app-errors.log"),
                                                                                  rollingInterval: RollingInterval.Day,
                                                                                  outputTemplate: "{UtcTime}|{HttpRequestType}|{HttpRequestRawUrl}|{WebApiController}|{WebApiAction}|{HttpRequestClientHostIP}|{HttpRequestClientHostName}|{Message:lj}{NewLine}{Exception}",
                                                                                  shared: true))
                                                            .CreateLogger(), true);
            var logger = apiLoggerFactory.CreateLogger("app-errors");

            if (appConfiguration.GetValue("Logging:LogRequests", false))
            {
                httpConfig.MessageHandlers.Add(new RequestLoggerCSV(logFolder,
                                                                    logRequests: true,
                                                                    logResponses: true,
                                                                    logContent: appConfiguration.GetValue("Logging:LogContent", false)));
            }

            httpConfig.Services.Replace(typeof(IExceptionLogger),
                                        new DefaultExceptionLogger(GetExceptionLoggerAuditEventRepository(logFolder), logger));
        }
예제 #16
0
        static void InitializeENodeFramework()
        {
            var assemblies = new[]
            {
                Assembly.Load("NoteSample.Domain"),
                Assembly.Load("NoteSample.Commands"),
                Assembly.Load("NoteSample.CommandHandlers"),
                Assembly.GetExecutingAssembly()
            };
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode");

            _configuration = Configuration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseSerilog(loggerFactory)
                             .UseJsonNet()
                             .RegisterUnhandledExceptionHandler()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .UseEQueue()
                             .BuildContainer()
                             .InitializeBusinessAssemblies(assemblies)
                             .StartEQueue()
                             .Start();

            Console.WriteLine(string.Empty);

            _logger = ObjectContainer.Resolve <ILoggerFactory>().Create(typeof(Program).Name);
            _logger.Info("ENode started...");
        }
예제 #17
0
        public static IServiceCollection AddCustomizedLogging(this IServiceCollection sc)
        {
            var sp                  = sc.BuildServiceProvider();
            var httpAccessor        = sp.GetRequiredService <IHttpContextAccessor>();
            var correlationAccessor = sp.GetRequiredService <ICorrelationContextAccessor>();
            var configuration       = sp.GetRequiredService <IOptions <EnvironmentConfiguration> >();
            var logLevelStr         = configuration.Value.LOG_LEVEL;

            var logLevel = Enum.TryParse(logLevelStr, out LogEventLevel level) ? level : LogEventLevel.Information;

            var formatter = new JsonLogFormatter();

            var conf = new LoggerConfiguration()
                       .Enrich.FromLogContext()
                       .Enrich.With(new HttpEnricher(httpAccessor, correlationAccessor))
                       .MinimumLevel.ControlledBy(new LoggingLevelSwitch(logLevel))
                       .MinimumLevel.Override("CorrelationId", LogEventLevel.Error);

            conf.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}");
            // Add additional sinks (Azure, logentries, etc) here

            var serilog = conf.CreateLogger();

            Microsoft.Extensions.Logging.ILoggerFactory msLoggerFactory = new SerilogLoggerFactory(serilog);
            msLoggerFactory.AddProvider(new SerilogLoggerProvider(serilog));

            sc.AddSingleton <ILogger>(serilog);
            sc.AddSingleton(msLoggerFactory).AddSingleton(msLoggerFactory.CreateLogger("PROJECT_NAME"));

            return(sc);
        }
예제 #18
0
        static void InitializeENodeFramework()
        {
            var assemblies = new[]
            {
                Assembly.Load("NoteSample.Domain"),
                Assembly.GetExecutingAssembly()
            };
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode", minimumLevel: Serilog.Events.LogEventLevel.Error);

            _configuration = Configuration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseSerilog(loggerFactory)
                             .UseJsonNet()
                             .RegisterUnhandledExceptionHandler()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .UseEQueue()
                             .BuildContainer()
                             .InitializeBusinessAssemblies(assemblies)
                             .StartEQueue();

            Console.WriteLine("ENode started...");
        }
예제 #19
0
        private static void ConfigureCompositionRoot(
            string connectionString,
            IExecutionContextAccessor executionContextAccessor,
            ILogger logger,
            EmailsConfiguration emailsConfiguration,
            IEventsBus eventsBus,
            IEmailSender emailSender)
        {
            var builder = new ContainerBuilder();

            builder.RegisterModule(new LoggingModule(logger.ForContext("Module", "Matches")));

            var loggerFactory = new SerilogLoggerFactory(logger);


            builder.RegisterModule(new DataAccessModule(connectionString, loggerFactory));
            builder.RegisterModule(new DomainModule());
            builder.RegisterModule(new ProcessingModule());
            builder.RegisterModule(new EventsBusModule(eventsBus));
            builder.RegisterModule(new MediatorModule());
            builder.RegisterModule(new OutboxModule());
            builder.RegisterModule(new EmailModule(emailsConfiguration, emailSender));
            builder.RegisterModule(new QuartzModule());
            builder.RegisterModule(new IntegrationModule());
            //TODO: Add Integration Events Events

            builder.RegisterInstance(executionContextAccessor);

            _container = builder.Build();

            MatchesCompositionRoot.SetContainer(_container);
        }
예제 #20
0
        private static void InitializeEQueue()
        {
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode");

            _ecommonConfiguration = ECommonConfiguration
                                    .Create()
                                    .UseAutofac()
                                    .RegisterCommonComponents()
                                    .UseSerilog(loggerFactory)
                                    .UseJsonNet()
                                    .RegisterUnhandledExceptionHandler()
                                    .RegisterEQueueComponents()
                                    .BuildContainer();
            ConfigSettings.Initialize();
            var setting = new NameServerSetting()
            {
                BindingAddress = new IPEndPoint(IPAddress.Loopback, ConfigSettings.NameServerPort)
            };

            _nameServer = new NameServerController(setting);
            ObjectContainer.Resolve <ILoggerFactory>().Create(typeof(Bootstrap).FullName).Info("NameServer initialized.");
        }
예제 #21
0
        public ILogger CreateLogger(string categoryName)
        {
            LogEventLevel eventLevel = _serilogOptions.MinimumLevel.Default;

            foreach (var overrideOption in _serilogOptions.MinimumLevel.Override)
            {
                if (categoryName.StartsWith(overrideOption.Key))
                {
                    eventLevel = overrideOption.Value;
                }
            }

            // Chain new loggers to the global loggers with its own switch
            // taking into accound any "Overrides"
            var levelSwitch = new LoggingLevelSwitch(eventLevel);

            _loggerSwitches.GetOrAdd(categoryName, levelSwitch);
            var serilogger = new Serilog.LoggerConfiguration()
                             .MinimumLevel.ControlledBy(levelSwitch)
                             .WriteTo.Logger(_globalLogger)
                             .CreateLogger();
            var factory = new SerilogLoggerFactory(serilogger, true);

            return(_loggers.GetOrAdd(categoryName, factory.CreateLogger(categoryName)));
        }
예제 #22
0
        static void Main(string[] args)
        {
            SerilogLoggerFactory.CreateDimensionDataConsoleLogger(Startup.ServiceName + "_Host", LogEventLevel.Verbose);

            string protocol = "http";
            string hostname = "+";
            int    port     = 16888;

            HostFactory.Run(
                hostConfig =>
            {
                hostConfig.UseSerilog();

                hostConfig.AddCommandLineDefinition("protocol", arg => protocol = arg);
                hostConfig.AddCommandLineDefinition("hostname", arg => hostname = arg);
                hostConfig.AddCommandLineDefinition("port", arg => port         = int.Parse(arg));
                hostConfig.ApplyCommandLine();


                hostConfig.Service <TestMicroService>(() => new TestMicroService(protocol, hostname, port));

                hostConfig.RunAsNetworkService();
                hostConfig.SetServiceName("TestMicroService");
                hostConfig.SetDisplayName("Dimension Data - " + Startup.ServiceDescription);
                hostConfig.SetDescription("Dimension Data - " + Startup.ServiceDescription);
            });
        }
        public static IHostBuilder UseSerilog(
            this IHostBuilder builder,
            Action <HostBuilderContext, LoggerConfiguration> configureLogger,
            bool preserveStaticLogger = false,
            bool writeToProviders     = false)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (configureLogger == null)
            {
                throw new ArgumentNullException(nameof(configureLogger));
            }

            builder.ConfigureServices((context, collection) =>
            {
                var loggerConfiguration = new LoggerConfiguration();

                LoggerProviderCollection loggerProviders = null;
                if (writeToProviders)
                {
                    loggerProviders = new LoggerProviderCollection();
                    loggerConfiguration.WriteTo.Providers(loggerProviders);
                }

                configureLogger(context, loggerConfiguration);
                var logger = loggerConfiguration.CreateLogger();

                Serilog.ILogger registeredLogger = null;
                if (preserveStaticLogger)
                {
                    registeredLogger = logger;
                }
                else
                {
                    // Passing a `null` logger to `SerilogLoggerFactory` results in disposal via
                    // `Log.CloseAndFlush()`, which additionally replaces the static logger with a no-op.
                    Log.Logger = logger;
                }

                collection.AddSingleton <ILoggerFactory>(services =>
                {
                    var factory = new SerilogLoggerFactory(registeredLogger, true, loggerProviders);

                    if (writeToProviders)
                    {
                        foreach (var provider in services.GetServices <ILoggerProvider>())
                        {
                            factory.AddProvider(provider);
                        }
                    }

                    return(factory);
                });

                ConfigureServices(collection, logger);
            });
            return(builder);
        }
예제 #24
0
파일: Startup.cs 프로젝트: wangyuzhu/forum
        private void InitializeENode(IServiceCollection services)
        {
            var assemblies = new[]
            {
                Assembly.Load("Forum.Commands"),
                Assembly.Load("Forum.QueryServices"),
                Assembly.Load("Forum.QueryServices.Dapper"),
                Assembly.Load("Forum.Web")
            };
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", "logs\\ecommon")
                                .AddFileLogger("EQueue", "logs\\equeue")
                                .AddFileLogger("ENode", "logs\\enode");

            ECommon.Configurations.Configuration
            .Create()
            .UseAutofac()
            .RegisterCommonComponents()
            .UseSerilog(loggerFactory)
            .UseJsonNet()
            .RegisterUnhandledExceptionHandler()
            .CreateENode()
            .RegisterENodeComponents()
            .RegisterBusinessComponents(assemblies)
            .UseEQueue()
            .RegisterMvcServices(services)
            .BuildContainer()
            .InitializeBusinessAssemblies(assemblies)
            .StartEQueue();

            ObjectContainer.Resolve <ILoggerFactory>().Create(GetType().FullName).Info("ENode initialized.");
        }
예제 #25
0
        private static void ConfigureCompositionRoot(
            string connectionString,
            IExecutionContextAccessor executionContextAccessor,
            ILogger logger,
            EmailsConfiguration emailsConfiguration)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterModule(new LoggingModule(logger.ForContext("Module", "Meetings")));

            var loggerFactory = new SerilogLoggerFactory(logger);

            containerBuilder.RegisterModule(new DataAccessModule(connectionString, loggerFactory));

            containerBuilder.RegisterModule(new ProcessingModule());
            containerBuilder.RegisterModule(new EventsBusModule());
            containerBuilder.RegisterModule(new MediatorModule());
            containerBuilder.RegisterModule(new AuthenticationModule());
            containerBuilder.RegisterModule(new OutboxModule());
            containerBuilder.RegisterModule(new EmailModule(emailsConfiguration));
            containerBuilder.RegisterModule(new QuartzModule());

            containerBuilder.RegisterInstance(executionContextAccessor);

            _container = containerBuilder.Build();

            MeetingsCompositionRoot.SetContainer(_container);
        }
 public TypedLoggingComponent(Serilog.ILogger logger)
 {
     using (var logfactory = new SerilogLoggerFactory(logger))
     {
         _logger = logfactory.CreateLogger(typeof(T).FullName);
     }
 }
예제 #27
0
        private void SetupSerilog()
        {
            var loggingPath = Path.Combine(WorkingDirectory, "logging.yaml");

            if (!File.Exists(loggingPath))
            {
                // First run, logging.yaml doesn't exist yet. We can not wait for auto-copy as it would be too late.
                using var stream = typeof(AsyncHelper).Assembly.GetManifestResourceStream("OpenMod.Core.logging.yaml");
                using var reader = new StreamReader(stream ?? throw new MissingManifestResourceException("Couldn't find resource: OpenMod.Core.logging.yaml"));

                var fileContent = reader.ReadToEnd();
                File.WriteAllText(loggingPath, fileContent);
            }

            var configuration = new ConfigurationBuilder()
                                .SetBasePath(WorkingDirectory)
                                .AddYamlFile("logging.yaml")
                                .AddEnvironmentVariables()
                                .Build();

            var loggerConfiguration = new LoggerConfiguration()
                                      .ReadFrom.Configuration(configuration);

            var serilogLogger = Log.Logger = loggerConfiguration.CreateLogger();

            m_LoggerFactory = new SerilogLoggerFactory(serilogLogger);
            m_Logger        = m_LoggerFactory.CreateLogger <Runtime>();
        }
        private static void ConfigureCompositionRoot(
            string connectionString,
            IExecutionContextAccessor executionContextAccessor,
            ILogger logger,
            EmailsConfiguration emailsConfiguration,
            string textEncryptionKey,
            IEmailSender emailSender)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterModule(new LoggingModule(logger.ForContext("Module", "UserAccess")));

            var loggerFactory = new SerilogLoggerFactory(logger);

            containerBuilder.RegisterModule(new DataAccessModule(connectionString, loggerFactory));
            containerBuilder.RegisterModule(new DomainModule());
            containerBuilder.RegisterModule(new ProcessingModule());
            containerBuilder.RegisterModule(new EventsBusModule());
            containerBuilder.RegisterModule(new MediatorModule());
            containerBuilder.RegisterModule(new OutboxModule());
            containerBuilder.RegisterModule(new QuartzModule());
            containerBuilder.RegisterModule(new EmailModule(emailsConfiguration, emailSender));
            containerBuilder.RegisterModule(new SecurityModule(textEncryptionKey));

            containerBuilder.RegisterInstance(executionContextAccessor);

            _container = containerBuilder.Build();

            UserAccessCompositionRoot.SetContainer(_container);
        }
예제 #29
0
        private static void ConfigureContainer(
            string connectionString,
            IExecutionContextAccessor executionContextAccessor,
            ILogger logger,
            IEventsBus eventsBus)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterModule(new LoggingModule(logger));

            var loggerFactory = new SerilogLoggerFactory(logger);

            containerBuilder.RegisterModule(new DataAccessModule(connectionString, loggerFactory));

            containerBuilder.RegisterModule(new ProcessingModule());
            containerBuilder.RegisterModule(new EventsBusModule(eventsBus));
            containerBuilder.RegisterModule(new MediatorModule());
            containerBuilder.RegisterModule(new AuthenticationModule());

            var domainNotificationsMap = new BiDictionary <string, Type>();

            domainNotificationsMap.Add("MeetingGroupProposalAcceptedNotification", typeof(MeetingGroupProposalAcceptedNotification));
            containerBuilder.RegisterModule(new OutboxModule(domainNotificationsMap));

            containerBuilder.RegisterModule(new QuartzModule());

            containerBuilder.RegisterInstance(executionContextAccessor);

            _container = containerBuilder.Build();

            AdministrationCompositionRoot.SetContainer(_container);
        }
        public static IServiceCollection AddDefaultSerilog(this IServiceCollection serviceDescriptors, WebApiConfig apiConfig = null, Action <LoggerConfiguration> configureLogger = null, bool preserveStaticLogger = false, bool writeToProviders = true)
        {
            var loggerConfiguration = new LoggerConfiguration();

            LoggerProviderCollection loggerProviders = null;

            if (writeToProviders)
            {
                loggerProviders = new LoggerProviderCollection();

                loggerConfiguration.WriteTo.Providers(loggerProviders);
            }

            apiConfig = apiConfig ?? new WebApiConfig();
            configFromWebApiConfig(loggerConfiguration, apiConfig);

            configureLogger?.Invoke(loggerConfiguration);
            var logger = loggerConfiguration.CreateLogger();


            Serilog.ILogger registeredLogger = null;
            if (preserveStaticLogger)
            {
                registeredLogger = logger;
            }
            else
            {
                Log.Logger = logger;
            }

            // 去除内置的LoggerProvider
            var removeProviders = serviceDescriptors.Where(x => x.ServiceType == typeof(ILoggerProvider)).ToList();

            removeProviders.ForEach(p =>
            {
                serviceDescriptors.Remove(p);
            });


            serviceDescriptors.AddSingleton <ILoggerFactory>(services =>
            {
                var factory = new SerilogLoggerFactory(registeredLogger, true, loggerProviders);

                if (writeToProviders)
                {
                    foreach (var provider in services.GetServices <ILoggerProvider>())
                    {
                        factory.AddProvider(provider);
                    }
                }

                return(factory);
            });

            // 日志定时清理托管服务
            serviceDescriptors.AddHostedService <ClearLogsHostService>();

            return(serviceDescriptors);
        }