diff --git a/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs b/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs index 244d49ee..1b99127b 100644 --- a/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs +++ b/src/Elastic.Serilog.Sinks/ElasticsearchSink.cs @@ -67,6 +67,20 @@ public ElasticsearchSinkOptions() : this(new DefaultHttpTransport(TransportHelpe /// public string? IlmPolicy { get; set; } + /// + /// Provide an explicit minimum for the Elasticsearch sink. + /// This allows you to separately configure the sink to filter out messages. + /// E.g: Configure default logging at but only write + /// to Elasticsearch + /// + public LogEventLevel? MinimumLevel { get; set; } + + /// + /// A switch allowing the pass-through minimum level to be changed at runtime. + /// Takes precedence over if both are configured + /// + public LoggingLevelSwitch? LevelSwitch { get; set; } + } /// diff --git a/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs b/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs index e1cb738c..3276caef 100644 --- a/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs +++ b/src/Elastic.Serilog.Sinks/ElasticsearchSinkExtensions.cs @@ -4,6 +4,8 @@ using Elastic.Transport; using Serilog; using Serilog.Configuration; +using Serilog.Core; +using Serilog.Events; namespace Elastic.Serilog.Sinks { @@ -17,7 +19,11 @@ public static class ElasticsearchSinkExtensions /// Use configure where and how data should be written /// public static LoggerConfiguration Elasticsearch(this LoggerSinkConfiguration loggerConfiguration, ElasticsearchSinkOptions? options = null) => - loggerConfiguration.Sink(new ElasticsearchSink(options ?? new ElasticsearchSinkOptions())); + loggerConfiguration.Sink( + new ElasticsearchSink(options ?? new ElasticsearchSinkOptions()) + , restrictedToMinimumLevel: options?.MinimumLevel ?? LevelAlias.Minimum + , levelSwitch: options?.LevelSwitch + ); /// /// Write logs directly to Elasticsearch. @@ -26,7 +32,11 @@ public static LoggerConfiguration Elasticsearch(this LoggerSinkConfiguration log /// public static LoggerConfiguration Elasticsearch(this LoggerSinkConfiguration loggerConfiguration, ElasticsearchSinkOptions? options = null) where TEcsDocument : EcsDocument, new() => - loggerConfiguration.Sink(new ElasticsearchSink(options ?? new ElasticsearchSinkOptions())); + loggerConfiguration.Sink( + new ElasticsearchSink(options ?? new ElasticsearchSinkOptions()) + , restrictedToMinimumLevel: options?.MinimumLevel ?? LevelAlias.Minimum + , levelSwitch: options?.LevelSwitch + ); /// /// Write logs directly to Elasticsearch. @@ -38,15 +48,18 @@ public static LoggerConfiguration Elasticsearch( ICollection nodes, Action? configureOptions = null, Action? configureTransport = null, - bool useSniffing = true + bool useSniffing = true, + LoggingLevelSwitch? levelSwitch = null, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum ) { var transportConfig = useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes); configureTransport?.Invoke(transportConfig); + var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); - return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions)); + return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); } /// @@ -60,7 +73,9 @@ public static LoggerConfiguration Elasticsearch( ICollection nodes, Action>? configureOptions = null, Action? configureTransport = null, - bool useSniffing = true + bool useSniffing = true, + LoggingLevelSwitch? levelSwitch = null, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum ) where TEcsDocument : EcsDocument, new() { var transportConfig = useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes); @@ -68,7 +83,7 @@ public static LoggerConfiguration Elasticsearch( var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); - return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions)); + return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); } /// @@ -82,7 +97,9 @@ public static LoggerConfiguration ElasticCloud( string cloudId, string apiKey, Action? configureOptions = null, - Action? configureTransport = null + Action? configureTransport = null, + LoggingLevelSwitch? levelSwitch = null, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum ) { var transportConfig = TransportHelper.Cloud(cloudId, apiKey); @@ -90,7 +107,7 @@ public static LoggerConfiguration ElasticCloud( var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); - return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions)); + return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); } /// @@ -105,7 +122,9 @@ public static LoggerConfiguration ElasticCloud( string cloudId, string apiKey, Action>? configureOptions = null, - Action? configureTransport = null + Action? configureTransport = null, + LoggingLevelSwitch? levelSwitch = null, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum ) where TEcsDocument : EcsDocument, new() { var transportConfig = TransportHelper.Cloud(cloudId, apiKey); @@ -113,7 +132,7 @@ public static LoggerConfiguration ElasticCloud( var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); - return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions)); + return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); } /// @@ -128,7 +147,9 @@ public static LoggerConfiguration ElasticCloud( string username, string password, Action? configureOptions = null, - Action? configureTransport = null + Action? configureTransport = null, + LoggingLevelSwitch? levelSwitch = null, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum ) { var transportConfig = TransportHelper.Cloud(cloudId, username, password); @@ -136,7 +157,7 @@ public static LoggerConfiguration ElasticCloud( var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); - return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions)); + return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); } /// @@ -152,7 +173,9 @@ public static LoggerConfiguration ElasticCloud( string username, string password, Action>? configureOptions = null, - Action? configureTransport = null + Action? configureTransport = null, + LoggingLevelSwitch? levelSwitch = null, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum ) where TEcsDocument : EcsDocument, new() { var transportConfig = TransportHelper.Cloud(cloudId, username, password); @@ -160,7 +183,7 @@ public static LoggerConfiguration ElasticCloud( var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig)); configureOptions?.Invoke(sinkOptions); - return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions)); + return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions), restrictedToMinimumLevel, levelSwitch); } } }