From 8587ac6f6dcba24ec92262868e4b6ef75630b9c7 Mon Sep 17 00:00:00 2001 From: "Jonas Merkle [JJM]" Date: Mon, 16 Nov 2020 18:37:57 +0100 Subject: [PATCH 1/2] fixed naming again --- README.md | 7 ++--- .../Serilog.Sinks.SlackWebHook.Example.csproj | 2 +- .../SlackSinkExample.cs | 5 ++-- .../Serilog.Sinks.SlackWebHook.Tests.csproj | 2 +- .../SlackSinkOptionsTests.cs | 6 ++--- .../Serilog.Sinks.SlackWebHook.csproj | 6 ++++- .../SlackLoggerConfigurationExtensions.cs | 26 +++++++++---------- .../Serilog.Sinks.SlackWebHook/SlackSink.cs | 19 ++++++++------ .../SlackSinkActivationSwitch.cs | 10 +++---- .../SlackSinkMessageTools.cs | 2 +- .../SlackSinkOptions.cs | 12 ++++++--- 11 files changed, 54 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index dca24a6..dd11bdd 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,14 @@ Log.Logger = new LoggerConfiguration() .WriteTo.Slack( slackWebHookUrl: "https://...", slackChannel: null + ) .CreateLogger(); ``` b) Recommended usage: ```csharp -var logLevelSwitch = new LoggingLevelSwitch(initialMinimumLevel: LogEventLevel.Verbos); +var logLevelSwitch = new LoggingLevelSwitch(initialMinimumLevel: LogEventLevel.Verbose); Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Slack( @@ -73,7 +74,7 @@ Log.Logger = new LoggerConfiguration() periodicBatchingSinkOptionsQueueLimit: 10000, sinkRestrictedToMinimumLevel: LogEventLevel.Verbose, - sinkLevelSwitch:logLevelSwitch) + sinkLevelSwitch:logLevelSwitch ) .CreateLogger(); ``` @@ -114,7 +115,7 @@ Log.Logger = new LoggerConfiguration() sinkOutputTemplate: null, sinkLevelSwitch: null, sinkFormatProvider: null, - statusSwitch: null + sinkActivationSwitch: null ) .CreateLogger(); ``` diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/Serilog.Sinks.SlackWebHook.Example.csproj b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/Serilog.Sinks.SlackWebHook.Example.csproj index ddca2e6..6d33d75 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/Serilog.Sinks.SlackWebHook.Example.csproj +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/Serilog.Sinks.SlackWebHook.Example.csproj @@ -13,7 +13,7 @@ https://github.com/jonas-merkle/serilog-sinks-slackwebhook Serilog.Sinks.SlackWebHook.Example Serilog.Sinks.SlackWebHook.Example - 1.1.0 + 1.2.0 diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/SlackSinkExample.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/SlackSinkExample.cs index 147af9e..98501c5 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/SlackSinkExample.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Example/SlackSinkExample.cs @@ -6,7 +6,7 @@ namespace Serilog.Sinks.SlackWebHook.Example { public static class SlackSinkExample { - public static void Main(string[] args) + public static void Main() { string slackChannel = null; @@ -17,9 +17,8 @@ public static void Main(string[] args) Console.Write("Slack WebHook Url: "); var input = Console.ReadLine(); - string slackWebHookUrl; if (string.IsNullOrEmpty(input)) throw new ArgumentException("No valid WebHook Url!"); - else slackWebHookUrl = input; + var slackWebHookUrl = input; Console.WriteLine(); Console.Write("Slack Channel (optional): "); diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/Serilog.Sinks.SlackWebHook.Tests.csproj b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/Serilog.Sinks.SlackWebHook.Tests.csproj index e0c23d0..32042d4 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/Serilog.Sinks.SlackWebHook.Tests.csproj +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/Serilog.Sinks.SlackWebHook.Tests.csproj @@ -11,7 +11,7 @@ https://github.com/jonas-merkle/serilog-sinks-slackwebhook GitHub serilog, serilog-sink, slack, logging, csharp, unit-tests - 1.1.0 + 1.2.0 diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/SlackSinkOptionsTests.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/SlackSinkOptionsTests.cs index 97f58f8..2a7b8df 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/SlackSinkOptionsTests.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.Tests/SlackSinkOptionsTests.cs @@ -26,9 +26,9 @@ public void DefaultConstructorTest() Assert.IsTrue(options.SlackAttachmentColors.Count == 6); Assert.IsTrue(options.SlackAttachmentFooterIcon.Count == 6); - Assert.IsTrue(options.SlackPeriodicBatchingSinkOptionsBatchSizeLimit >= 0); - Assert.IsTrue(!options.SlackPeriodicBatchingSinkOptionsPeriod.Equals(TimeSpan.Zero)); - Assert.IsTrue(options.SlackPeriodicBatchingSinkOptionsQueueLimit >= 0); + Assert.IsTrue(options.PeriodicBatchingSinkOptionsBatchSizeLimit >= 0); + Assert.IsTrue(!options.PeriodicBatchingSinkOptionsPeriod.Equals(TimeSpan.Zero)); + Assert.IsTrue(options.PeriodicBatchingSinkOptionsQueueLimit >= 0); } #endregion diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.csproj b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.csproj index 97de1af..3ac6cce 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.csproj +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook.csproj @@ -15,7 +15,11 @@ false Serilog.Sinks.SlackWebHook - 1.1.0 + 1.2.0 + + + + 5 diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackLoggerConfigurationExtensions.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackLoggerConfigurationExtensions.cs index e72e8bf..49fe829 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackLoggerConfigurationExtensions.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackLoggerConfigurationExtensions.cs @@ -46,7 +46,7 @@ public static class SlackLoggerConfigurationExtensions /// The template for the output format of the log messages (optional). /// A to change the minimum a log message must have to be send to Slack (optional). /// A format provider (optional). - /// A Switch to change the activation status of the sink on the fly (optional). + /// A Switch to change the activation status of the sink on the fly (optional). /// Instance of object. public static LoggerConfiguration Slack( this LoggerSinkConfiguration loggerSinkConfiguration, @@ -89,7 +89,7 @@ public static LoggerConfiguration Slack( string sinkOutputTemplate = null, LoggingLevelSwitch sinkLevelSwitch = null, IFormatProvider sinkFormatProvider = null, - SlackSinkActivationSwitch statusSwitch = null + SlackSinkActivationSwitch sinkActivationSwitch = null ) { return Slack(loggerSinkConfiguration, slackWebHookUrl, slackUsername, slackEmojiIcon, slackUriIcon, @@ -100,7 +100,7 @@ public static LoggerConfiguration Slack( slackDisplayExtendedInfoAttachmentShort, slackAddExceptionAttachment, slackDisplayExceptionAttachmentShort, slackConnectionTimeout, slackHttpClientObj, generateSlackFunctions, periodicBatchingSinkOptionsBatchSizeLimit, periodicBatchingSinkOptionsPeriod, periodicBatchingSinkOptionsQueueLimit, sinkRestrictedToMinimumLevel, - sinkOutputTemplate, sinkLevelSwitch, sinkFormatProvider, statusSwitch); + sinkOutputTemplate, sinkLevelSwitch, sinkFormatProvider, sinkActivationSwitch); } /// @@ -137,7 +137,7 @@ public static LoggerConfiguration Slack( /// The template for the output format of the log messages (optional). /// A to change the minimum a log message must have to be send to Slack (optional). /// A format provider (optional). - /// A Switch to change the activation status of the sink on the fly (optional). + /// A Switch to change the activation status of the sink on the fly (optional). /// Instance of object. public static LoggerConfiguration Slack( this LoggerSinkConfiguration loggerSinkConfiguration, @@ -180,7 +180,7 @@ public static LoggerConfiguration Slack( string sinkOutputTemplate = null, LoggingLevelSwitch sinkLevelSwitch = null, IFormatProvider sinkFormatProvider = null, - SlackSinkActivationSwitch statusSwitch = null + SlackSinkActivationSwitch sinkActivationSwitch = null ) { ParseMode? slackParse = null; @@ -220,7 +220,7 @@ public static LoggerConfiguration Slack( slackDisplayExceptionAttachmentShort, slackConnectionTimeout, slackHttpClient, generateSlackMessageText, generateSlackMessageAttachments, generateSlackMessageBlocks, periodicBatchingSinkOptionsBatchSizeLimit, periodicBatchingSinkOptionsPeriod, periodicBatchingSinkOptionsQueueLimit, sinkRestrictedToMinimumLevel, - sinkOutputTemplate, sinkLevelSwitch, sinkFormatProvider, statusSwitch); + sinkOutputTemplate, sinkLevelSwitch, sinkFormatProvider, sinkActivationSwitch); } #endregion @@ -263,7 +263,7 @@ public static LoggerConfiguration Slack( /// The template for the output format of the log messages (optional). /// A to change the minimum a log message must have to be send to Slack (optional). /// A format provider (optional). - /// A Switch to change the activation status of the sink on the fly (optional). + /// A Switch to change the activation status of the sink on the fly (optional). /// Instance of object. private static LoggerConfiguration Slack( this LoggerSinkConfiguration loggerSinkConfiguration, @@ -308,7 +308,7 @@ private static LoggerConfiguration Slack( string sinkOutputTemplate = null, LoggingLevelSwitch sinkLevelSwitch = null, IFormatProvider sinkFormatProvider = null, - SlackSinkActivationSwitch statusSwitch = null + SlackSinkActivationSwitch sinkActivationSwitch = null ) { if (slackWebHookUrl == null) throw new ArgumentNullException(nameof(slackWebHookUrl), "The Slack WebHook can't be null!"); @@ -343,14 +343,14 @@ private static LoggerConfiguration Slack( if (slackConnectionTimeout != null) slackSinkOptions.SlackConnectionTimeout = (int)slackConnectionTimeout; - if (periodicBatchingSinkOptionsBatchSizeLimit != null) slackSinkOptions.SlackPeriodicBatchingSinkOptionsBatchSizeLimit = (int)periodicBatchingSinkOptionsBatchSizeLimit; - if (periodicBatchingSinkOptionsPeriod != null) slackSinkOptions.SlackPeriodicBatchingSinkOptionsPeriod = (TimeSpan)periodicBatchingSinkOptionsPeriod; - if (periodicBatchingSinkOptionsQueueLimit != null) slackSinkOptions.SlackPeriodicBatchingSinkOptionsQueueLimit = (int)periodicBatchingSinkOptionsQueueLimit; + if (periodicBatchingSinkOptionsBatchSizeLimit != null) slackSinkOptions.PeriodicBatchingSinkOptionsBatchSizeLimit = (int)periodicBatchingSinkOptionsBatchSizeLimit; + if (periodicBatchingSinkOptionsPeriod != null) slackSinkOptions.PeriodicBatchingSinkOptionsPeriod = (TimeSpan)periodicBatchingSinkOptionsPeriod; + if (periodicBatchingSinkOptionsQueueLimit != null) slackSinkOptions.PeriodicBatchingSinkOptionsQueueLimit = (int)periodicBatchingSinkOptionsQueueLimit; - if (sinkOutputTemplate != null) slackSinkOptions.SlackSinkOutputTemplate = sinkOutputTemplate; + if (sinkOutputTemplate != null) slackSinkOptions.SinkOutputTemplate = sinkOutputTemplate; return loggerSinkConfiguration.Sink( - logEventSink: new SlackSink(slackSinkOptions, sinkFormatProvider, statusSwitch, slackHttpClient, + logEventSink: new SlackSink(slackSinkOptions, sinkFormatProvider, sinkActivationSwitch, slackHttpClient, generateSlackMessageText, generateSlackMessageAttachments, generateSlackMessageBlocks), restrictedToMinimumLevel: sinkRestrictedToMinimumLevel ?? LevelAlias.Minimum, levelSwitch: sinkLevelSwitch); diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSink.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSink.cs index 2ae8e67..750dc8a 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSink.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSink.cs @@ -34,7 +34,7 @@ public class SlackSink : PeriodicBatchingSink /// /// to change the activation status of the sink on the fly. /// - private readonly SlackSinkActivationSwitch _statusSwitch; + private readonly SlackSinkActivationSwitch _slackSinkActivationSwitch; /// /// object. @@ -80,13 +80,13 @@ public SlackSink( Func> generateSlackMessageBlocks = null ) : base( - slackSinkOptions.SlackPeriodicBatchingSinkOptionsBatchSizeLimit, - slackSinkOptions.SlackPeriodicBatchingSinkOptionsPeriod, - slackSinkOptions.SlackPeriodicBatchingSinkOptionsQueueLimit) + slackSinkOptions.PeriodicBatchingSinkOptionsBatchSizeLimit, + slackSinkOptions.PeriodicBatchingSinkOptionsPeriod, + slackSinkOptions.PeriodicBatchingSinkOptionsQueueLimit) { _slackSinkOptions = slackSinkOptions; _formatProvider = formatProvider; - _statusSwitch = statusSwitch ?? new SlackSinkActivationSwitch(); + _slackSinkActivationSwitch = statusSwitch ?? new SlackSinkActivationSwitch(); _slackHttpClient = slackHttpClient ?? new HttpClient(); // if no extern generation functions were specified, use the default ones @@ -121,9 +121,12 @@ protected override void Dispose(bool disposing) protected override async Task EmitBatchAsync(IEnumerable events) { // check activation status - if (_statusSwitch.SlackStatus == SlackSinkActivationSwitch.SlackActivationStatus.InActive) return; + if (_slackSinkActivationSwitch.SlackSinkStatus == SlackSinkActivationSwitch.SlackSinkActivationStatus.InActive) + { + return; + } - foreach (var logEvent in events) + foreach (LogEvent logEvent in events) { // create new slack message var msg = new SlackMessage @@ -150,7 +153,7 @@ protected override async Task EmitBatchAsync(IEnumerable events) // multi channel post var logMsgPosts = _slackClient.PostToChannelsAsync(msg, _slackSinkOptions.SlackChannels); - foreach (var logMsgPost in logMsgPosts) + foreach (Task logMsgPost in logMsgPosts) { await logMsgPost; } diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkActivationSwitch.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkActivationSwitch.cs index b2f3cda..c2f3d9f 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkActivationSwitch.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkActivationSwitch.cs @@ -10,7 +10,7 @@ public class SlackSinkActivationSwitch /// /// Enum to represent an activation status. /// - public enum SlackActivationStatus + public enum SlackSinkActivationStatus { InActive = 0, Active = 1 @@ -23,15 +23,15 @@ public enum SlackActivationStatus /// /// The current status. /// - public SlackActivationStatus SlackStatus { get; set; } + public SlackSinkActivationStatus SlackSinkStatus { get; set; } /// /// Initializes new instance of . /// - /// The . - public SlackSinkActivationSwitch(SlackActivationStatus activationStatus = SlackActivationStatus.Active) + /// The . + public SlackSinkActivationSwitch(SlackSinkActivationStatus slackSinkActivationStatus = SlackSinkActivationStatus.Active) { - SlackStatus = activationStatus; + SlackSinkStatus = slackSinkActivationStatus; } #endregion diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkMessageTools.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkMessageTools.cs index f96dbbc..7f06bcf 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkMessageTools.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkMessageTools.cs @@ -27,7 +27,7 @@ public static string GenerateSlackMessageText(LogEvent logEvent, IFormatProvider var slackSinkOptions = (SlackSinkOptions)options ?? throw new InvalidCastException(); // generate the log message text - var textFormatter = new MessageTemplateTextFormatter(slackSinkOptions.SlackSinkOutputTemplate, formatProvider); + var textFormatter = new MessageTemplateTextFormatter(slackSinkOptions.SinkOutputTemplate, formatProvider); var stringWriter = new StringWriter(); textFormatter.Format(logEvent, stringWriter); diff --git a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkOptions.cs b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkOptions.cs index ad46701..77d7cc4 100644 --- a/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkOptions.cs +++ b/Serilog.Sinks.SlackWebHook/Serilog.Sinks.SlackWebHook/SlackSinkOptions.cs @@ -181,17 +181,20 @@ public class SlackSinkOptions /// /// RECOMMENDED: Size of the batch of messages that get send at once to Slack. /// - public int SlackPeriodicBatchingSinkOptionsBatchSizeLimit { get; set; } = DefaultBatchSizeLimit; + // ReSharper disable once InconsistentNaming + public int PeriodicBatchingSinkOptionsBatchSizeLimit { get; set; } = DefaultBatchSizeLimit; /// /// RECOMMENDED: Time period between sending of batches of messages. /// - public TimeSpan SlackPeriodicBatchingSinkOptionsPeriod { get; set; } = DefaultPeriod; + // ReSharper disable once InconsistentNaming + public TimeSpan PeriodicBatchingSinkOptionsPeriod { get; set; } = DefaultPeriod; /// /// OPTIONAL: Maximum size of the queue that stores the messages before the messages were send in batches to Slack. /// - public int SlackPeriodicBatchingSinkOptionsQueueLimit { get; set; } = DefaultQueueLimit; + // ReSharper disable once InconsistentNaming + public int PeriodicBatchingSinkOptionsQueueLimit { get; set; } = DefaultQueueLimit; #endregion @@ -200,7 +203,8 @@ public class SlackSinkOptions /// /// OPTIONAL: The template for the output format of the log messages. /// - public string SlackSinkOutputTemplate { get; set; } = DefaultOutputTemplate; + // ReSharper disable once InconsistentNaming + public string SinkOutputTemplate { get; set; } = DefaultOutputTemplate; #endregion } From 6ac96fd44940ecfc123b936987ca6ff6684cca69 Mon Sep 17 00:00:00 2001 From: "Jonas Merkle [JJM]" Date: Mon, 16 Nov 2020 19:07:44 +0100 Subject: [PATCH 2/2] fixed links --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dd11bdd..6245887 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ A basic Slack Sink for the Serilog framework. | | | |----------------------:|-----------------------| | Nuget Package Version | [![Nuget Version](https://img.shields.io/nuget/v/Serilog.Sinks.SlackWebHook?style=flat-square)](https://www.nuget.org/packages/Serilog.Sinks.SlackWebHook/) | -| nuget.org Deployment | [![nuget.org Deployment](https://img.shields.io/azure-devops/release/jonas-merkle/09454b63-c969-4591-aa24-ea8867d031bd/1/2?style=flat-square)](https://dev.azure.com/jonas-merkle/serilog-sinks-slackwebhook/_release?view=all&_a=releases&definitionId=1) | -| Build Status Master | [![Build Status Master](https://img.shields.io/azure-devops/build/jonas-merkle/serilog-sinks-slackwebhook/3/master?style=flat-square)](https://dev.azure.com/jonas-merkle/serilog-sinks-slackwebhook/_build/latest?definitionId=3) | -| Build Status Develop | [![Build status Develop](https://img.shields.io/azure-devops/build/jonas-merkle/serilog-sinks-slackwebhook/4/develop?style=flat-square)](https://dev.azure.com/jonas-merkle/serilog-sinks-slackwebhook/_build/latest?definitionId=4) | -| Test Status Master | [![Test Status Master](https://img.shields.io/azure-devops/tests/jonas-merkle/serilog-sinks-slackwebhook/3?compact_message&style=flat-square)](https://dev.azure.com/jonas-merkle/serilog-sinks-slackwebhook/_test/analytics?definitionId=3&contextType=build) | -| Test Status Develop | [![Test Status Master](https://img.shields.io/azure-devops/tests/jonas-merkle/serilog-sinks-slackwebhook/4?compact_message&style=flat-square)](https://dev.azure.com/jonas-merkle/serilog-sinks-slackwebhook/_test/analytics?definitionId=4&contextType=build) | +| nuget.org Deployment | [![nuget.org Deployment](https://img.shields.io/azure-devops/release/jonas-merkle/09454b63-c969-4591-aa24-ea8867d031bd/1/2?style=flat-square)](https://dev.azure.com/jonas-merkle/Serilog.Sinks.SlackWebHook/_release?view=all&_a=releases&definitionId=1) | +| Build Status Master | [![Build Status Master](https://img.shields.io/azure-devops/build/jonas-merkle/Serilog.Sinks.SlackWebHook/3/master?style=flat-square)](https://dev.azure.com/jonas-merkle/Serilog.Sinks.SlackWebHook/_build/latest?definitionId=3) | +| Build Status Develop | [![Build status Develop](https://img.shields.io/azure-devops/build/jonas-merkle/Serilog.Sinks.SlackWebHook/4/develop?style=flat-square)](https://dev.azure.com/jonas-merkle/Serilog.Sinks.SlackWebHook/_build/latest?definitionId=4) | +| Test Status Master | [![Test Status Master](https://img.shields.io/azure-devops/tests/jonas-merkle/Serilog.Sinks.SlackWebHook/3?compact_message&style=flat-square)](https://dev.azure.com/jonas-merkle/Serilog.Sinks.SlackWebHook/_test/analytics?definitionId=3&contextType=build) | +| Test Status Develop | [![Test Status Master](https://img.shields.io/azure-devops/tests/jonas-merkle/Serilog.Sinks.SlackWebHook/4?compact_message&style=flat-square)](https://dev.azure.com/jonas-merkle/Serilog.Sinks.SlackWebHook/_test/analytics?definitionId=4&contextType=build) | | Sonar Code Quality | [![Sonar Code Quality](https://img.shields.io/sonar/quality_gate/jonas-merkle_serilog-sinks-slackwebhook?server=https%3A%2F%2Fsonarcloud.io&style=flat-square)](https://sonarcloud.io/dashboard?id=jonas-merkle_serilog-sinks-slackwebhook) | | Maintenance Status | ![Sonar Code Quality](https://img.shields.io/maintenance/yes/2020?style=flat-square) |