public static Serilog.ILogger Setup(IEncompassConfig config) { lock (syncRoot) { if (configured) { throw new Exception("Already Setup for this AppDomain."); } try { var baseLogger = new LoggerConfiguration() .WriteTo.Logger(aa => aa.MinimumLevel.Verbose()) .Enrich.FromLogContext() .Enrich.WithExceptionDetails() .Enrich.WithMachineName() .Enrich.WithProcessId() .Enrich.WithEnvironmentUserName() .Enrich.WithProcessName() .Enrich.WithAssemblyName() .Enrich.WithAssemblyVersion(); baseLogger.WriteTo.Logger(aa => aa.Destructure.ToMaximumDepth(20)); if (config.GetValue(Logging.Logger.ELASTICSEARCH_ENABLED, false)) { baseLogger.WriteTo.Elasticsearch(SerilogHelpers.GetElasticOptions(config)); } if (config.GetValue(Logging.Logger.FILE_ENABLED, false)) { baseLogger.WriteTo.RollingFile(pathFormat: config.GetValue( Logging.Logger.FILE_FOLDER, config.GetValue(Logging.Logger.FILE_NAME)), formatter: new JsonFormatter(renderMessage: false), fileSizeLimitBytes: config.GetValue(Logging.Logger.FILE_MAX_FILE_BYTES, 10000), retainedFileCountLimit: config.GetValue(Logging.Logger.FILE_MAX_FILES, 10)); } if (config.GetValue(Logging.Logger.LOGGLY_ENABLED, false)) { LogEventLevel eventLevel = SetLogglyEventLevelFromConfig(config); baseLogger.WriteTo.Loggly(logglyConfig: SerilogHelpers.GetLogglyConfig(config), formatProvider: CultureInfo.CurrentCulture, restrictedToMinimumLevel: eventLevel); } if (config.GetValue(Logging.Logger.CONSOLE_ENABLED, false)) { baseLogger.WriteTo.Console(new JsonFormatter(null, false, null)); } Log.Logger = baseLogger.CreateLogger(); configured = true; } catch (Exception ex) { Console.WriteLine($"ERROR CONFIGURING LOGGING: {ex}"); } } return(Serilog.Log.Logger); }
public static void Setup(IEncompassConfig config, Dictionary <string, string> additionalTags = null) { LoggerConfiguration baseLogger = null; lock (syncRoot) { try { //Serilog has a clever "enricher" approach, but it is created at setup time and wouldn't be easily compatible with how we add tags to logs now. We could make this a future enhancement. For now, just add these to each log event when we log. _additionalTags = new ConcurrentDictionary <string, string>(); if (!ReferenceEquals(additionalTags, null)) { foreach (var kv in additionalTags) { _additionalTags.TryAdd(kv.Key, kv.Value); } } baseLogger = new LoggerConfiguration() .WriteTo.Logger(aa => aa.MinimumLevel.Verbose()) .Enrich.FromLogContext() .Enrich.WithExceptionDetails() .Enrich.WithMachineName() .Enrich.WithProcessId() .Enrich.WithEnvironmentUserName() .Enrich.WithProcessName(); baseLogger.WriteTo.Logger(aa => aa.Destructure.ToMaximumDepth(20)); if (config.GetValue(Logger.ELASTICSEARCH_ENABLED, false)) { baseLogger.WriteTo.Elasticsearch(SerilogHelpers.GetElasticOptions(config)); } if (config.GetValue(Logger.FILE_ENABLED, false)) { baseLogger.WriteTo.RollingFile(pathFormat: config.GetValue( Logger.FILE_FOLDER, config.GetValue(Logger.FILE_NAME)), formatter: new JsonFormatter(null, false, null), fileSizeLimitBytes: config.GetValue(Logger.FILE_MAX_FILE_BYTES, 10000), retainedFileCountLimit: config.GetValue(Logger.FILE_MAX_FILES, 10)); } if (config.GetValue(Logger.LOGGLY_ENABLED, false)) { Serilog.Events.LogEventLevel eventLevel; eventLevel = SetLogglyEventLevelFromConfig(config); baseLogger.WriteTo.Loggly(logglyConfig: SerilogHelpers.GetLogglyConfig(config), formatProvider: CultureInfo.CurrentCulture, restrictedToMinimumLevel: eventLevel); } if (config.GetValue(Logger.CONSOLE_ENABLED, false)) { baseLogger.WriteTo.Console(new JsonFormatter(null, false, null)); } Serilog.Log.Logger = baseLogger.CreateLogger(); configured = true; } catch (Exception ex) { System.Console.WriteLine($"ERROR CONFIGURING LOGGING: {ex}"); } } }