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); }
private static Serilog.ILogger GetFileLogger(string logFilePath, NiceSerilogFormatter formatter) { return(new LoggerConfiguration() .MinimumLevel.Warning() .WriteTo.RollingFile(formatter, logFilePath, fileSizeLimitBytes: 5000000) .CreateLogger()); }
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); }
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); }