using System; using System.Configuration; using System.Diagnostics; using Serilog; using Serilog.Exceptions; using Serilog.Formatting.Elasticsearch; using Serilog.Sinks.Elasticsearch; using LogEventLevel = Serilog.Events.LogEventLevel; namespace Kreta.Web.Logger { public static class HangfireLogger { public static void SerilogGlobalConfiguration() { #if DEBUG Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg)); #endif Enum.TryParse(ConfigurationManager.AppSettings["serilog:minimum-level"], true, out LogEventLevel logEventLevel); var nodeUris = ConfigurationManager.AppSettings["serilog:write-to:Elasticsearch.nodeUris"]; var indexFormat = ConfigurationManager.AppSettings["serilog:write-to:Elasticsearch.indexFormat"]; bool.TryParse(ConfigurationManager.AppSettings["serilog:write-to:Elasticsearch.autoRegisterTemplate"], out var autoRegisterTemplate); Enum.TryParse(ConfigurationManager.AppSettings["serilog:write-to:Elasticsearch.autoRegisterTemplateVersion"], true, out AutoRegisterTemplateVersion autoRegisterTemplateVersion); Log.Logger = new LoggerConfiguration() .Enrich.WithExceptionDetails() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(nodeUris)) { IndexFormat = indexFormat, MinimumLogEventLevel = logEventLevel, AutoRegisterTemplate = autoRegisterTemplate, AutoRegisterTemplateVersion = autoRegisterTemplateVersion, CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true) }) .CreateLogger(); } public static void ShutdownSerilog() { Log.CloseAndFlush(); } } }