示例#1
0
        public static LoggerConfiguration GetLoggerConfiguration()
        {
            // Read Logging configuration
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json", optional: false)
                                .AddUserSecrets <Startup>()
                                .Build();
            var logCfg = configuration.GetSection("Logging");

            var application          = logCfg["Application"];
            var environment          = logCfg["Environment"];
            var rabbitMQHost         = logCfg["RabbitMQHost"];
            var rabbitMQVHost        = logCfg["RabbitMQVHost"];
            var rabbitPortIsSet      = int.TryParse(logCfg["RabbitMQPort"], out var rabbitMQPort);
            var rabbitMQUsername     = logCfg["RabbitMQUsername"];
            var rabbitMQPassword     = logCfg["RabbitMQPassword"];
            var rabbitMQExchangeName = logCfg["RabbitMQExchangeName"];
            var rabbitMQExchangeType = logCfg["RabbitMQExchangeType"];
            var serilogFilePath      = logCfg["SerilogFilePath"] ?? logCfg["LogFilePath"];

            Enum.TryParse(logCfg["SerilogMinLevel"], out LogEventLevel serilogMinLevel);
            bool.TryParse(logCfg["UseRabbit"], out var useRabbit);
            bool.TryParse(logCfg["UseFile"], out var useFile);

            var serilogFormatter     = new NiceSerilogFormatter(environment, application);
            var serilogConfiguration = new LoggerConfiguration()
                                       .Enrich.FromLogContext()
                                       .WriteTo.Console()
                                       .MinimumLevel.Is(serilogMinLevel);

            if (useRabbit && !string.IsNullOrEmpty(rabbitMQHost) && rabbitPortIsSet)
            {
                var rabbitCfg = new RabbitMQConfiguration
                {
                    Hostname     = rabbitMQHost,
                    VHost        = rabbitMQVHost,
                    Port         = rabbitMQPort,
                    Username     = rabbitMQUsername ?? "",
                    Password     = rabbitMQPassword ?? "",
                    Protocol     = RabbitMQ.Client.Protocols.AMQP_0_9_1,
                    Exchange     = rabbitMQExchangeName,
                    ExchangeType = rabbitMQExchangeType
                };

                // Write logs to RabbitMQ / Kibana
                serilogConfiguration.WriteTo.RabbitMQ(rabbitCfg, serilogFormatter);
            }

            // Write logs to file
            if (useFile)
            {
                serilogConfiguration.WriteTo.RollingFile(serilogFormatter,
                                                         serilogFilePath,
                                                         fileSizeLimitBytes: 5000000,
                                                         retainedFileCountLimit: 5,
                                                         flushToDiskInterval: TimeSpan.FromSeconds(20));
            }

            return(serilogConfiguration);
        }
示例#2
0
 private static Serilog.ILogger GetFileLogger(string logFilePath, NiceSerilogFormatter formatter)
 {
     return(new LoggerConfiguration()
            .MinimumLevel.Warning()
            .WriteTo.RollingFile(formatter, logFilePath, fileSizeLimitBytes: 5000000)
            .CreateLogger());
 }
示例#3
0
        public void Configure(ILoggingBuilder loggerFactory, IConfiguration configuration, IHostApplicationLifetime appLifetime, IHostEnvironment env, EnvironmentConfig environmentConfig)
        {
            // read appsettings
            var logCfg = configuration.GetSection("Logging");

            loggerFactory.AddConfiguration(logCfg);
            loggerFactory.AddConsole(); // add provider to send logs to System.Console.WriteLine()
            loggerFactory.AddDebug();   // add provider to send logs to System.Diagnostics.Debug.WriteLine()

            var rabbitSettingsFound = int.TryParse(logCfg["RabbitMQPort"], out var rPort);

            bool.TryParse(logCfg["UseRabbit"], out var useRabbit);
            string logFilePath = logCfg["LogFilePath"];

            Enum.TryParse(logCfg["SerilogMinLevel"], out LogEventLevel serilogMinLevel);

            var formatter = new NiceSerilogFormatter(environmentConfig.Name, "MAS");
            var logConfig = new LoggerConfiguration()
                            .MinimumLevel.Is(serilogMinLevel);

            if (rabbitSettingsFound && useRabbit)
            {
                var rHost = logCfg["RabbitMQHost"];

                var rabbit = new RabbitMQConfiguration
                {
                    Hostname     = rHost,
                    Port         = rPort,
                    Protocol     = RabbitMQ.Client.Protocols.AMQP_0_9_1,
                    Exchange     = "logging.application.serilog",
                    ExchangeType = "topic"
                };

                logConfig.WriteTo.RabbitMQ(rabbit, formatter);
            }

            bool.TryParse(logCfg["UseFile"], out var useFile);

            if (useFile) //probably dev only
            {
                logConfig.WriteTo.RollingFile(formatter, logFilePath, fileSizeLimitBytes: 5000000, retainedFileCountLimit: 5, flushToDiskInterval: TimeSpan.FromSeconds(20));
            }

            Log.Logger = logConfig.CreateLogger();

            // add serilog provider (this is the hook)
            loggerFactory.AddSerilog();

            // clean up on shutdown
            appLifetime.ApplicationStopped.Register(Log.CloseAndFlush);
        }
示例#4
0
        public void Configure(ILoggerFactory loggerFactory, IConfiguration configuration, IApplicationLifetime appLifetime, ILogEventEnricher eventEnricher)
        {
            // read appsettings
            var logCfg = configuration.GetSection("Logging");

            loggerFactory.AddConsole(logCfg); // add provider to send logs to System.Console.WriteLine()
            loggerFactory.AddDebug();         // add provider to send logs to System.Diagnostics.Debug.WriteLine()

            int rPort;

            int.TryParse(logCfg["RabbitMQPort"], out rPort);
            var rHost         = logCfg["RabbitMQHost"];
            var rVHost        = logCfg["RabbitMQVHost"];
            var rUsername     = logCfg["RabbitMQUsername"];
            var rPassword     = logCfg["RabbitMQPassword"];
            var rExchangeName = logCfg["RabbitMQExchangeName"];
            var rExchangeType = logCfg["RabbitMQExchangeType"];
            var logFilePath   = logCfg["SerilogFilePath"];
            var environment   = logCfg["Environment"];
            var application   = logCfg["Application"];

            LogEventLevel minLevelEnumVal;
            var           minLevel      = logCfg["SerilogMinLevel"];
            var           minLevelCased = char.ToUpper(minLevel[0]) + minLevel.ToLower().Substring(1);

            Enum.TryParse(minLevelCased, out minLevelEnumVal);


            var formatter = new NiceSerilogFormatter(environment, application);

            var rabbit = new RabbitMQConfiguration
            {
                Hostname     = rHost,
                VHost        = rVHost,
                Port         = rPort,
                Username     = rUsername,
                Password     = rPassword,
                Protocol     = RabbitMQ.Client.Protocols.AMQP_0_9_1,
                Exchange     = rExchangeName,
                ExchangeType = rExchangeType
            };


            try
            {
                Log.Logger = new LoggerConfiguration()
                             .Enrich.With(eventEnricher)
                             .MinimumLevel.Is(minLevelEnumVal)
                             .WriteTo.RabbitMQ(rabbit, formatter)
                             .WriteTo.RollingFile(formatter, logFilePath, fileSizeLimitBytes: 5000000)
                             .CreateLogger();

                // add serilog provider (this is the hook)
                loggerFactory.AddSerilog();
            }
            catch (Exception ex)
            {
                Log.Logger = GetFileLogger(logFilePath, formatter);
                loggerFactory.AddSerilog();

                var logger = loggerFactory.CreateLogger <SeriLogger>();
                logger.LogError($"Could not connect to RabbitMQ. Hostname:{rHost} Port:{rPort}, Username:{rUsername}, Exchange:{rExchangeName}, ExchangeType:{rExchangeType}, Exception: {ex.Message}");
            }

            // clean up on shutdown
            appLifetime.ApplicationStopped.Register(Log.CloseAndFlush);
        }