From cb6ba6104444fb875d2cd34e761aaaac86c80b0c Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 15 Mar 2024 10:07:13 +1000 Subject: [PATCH 1/3] Update to Serilog.Sinks.PeriodicBatching 4.0.0 --- .../CloudWatchLogSink.cs | 31 ++++++++++++++++--- .../Serilog.Sinks.AwsCloudWatch.csproj | 4 +-- .../CloudWatchLogsSinkExtensions.cs | 7 ++--- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs b/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs index 36faf32..21f25bd 100644 --- a/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs +++ b/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs @@ -10,6 +10,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; +using Serilog.Core; namespace Serilog.Sinks.AwsCloudWatch { @@ -17,7 +18,7 @@ namespace Serilog.Sinks.AwsCloudWatch /// A Serilog log sink that publishes to AWS CloudWatch Logs /// /// - public class CloudWatchLogSink : PeriodicBatchingSink + public class CloudWatchLogSink : ILogEventSink, IBatchedLogEventSink, IDisposable, IAsyncDisposable { /// /// The maximum log event size = 256 KB - 26 B @@ -55,6 +56,7 @@ public class CloudWatchLogSink : PeriodicBatchingSink private string logStreamName; private string nextSequenceToken; private readonly ITextFormatter textFormatter; + private readonly PeriodicBatchingSink batchingSink; private readonly SemaphoreSlim syncObject = new SemaphoreSlim(1); @@ -64,7 +66,7 @@ public class CloudWatchLogSink : PeriodicBatchingSink /// /// The cloud watch client. /// The options. - public CloudWatchLogSink(IAmazonCloudWatchLogs cloudWatchClient, ICloudWatchSinkOptions options) : base(options.BatchSizeLimit, options.Period, options.QueueSizeLimit) + public CloudWatchLogSink(IAmazonCloudWatchLogs cloudWatchClient, ICloudWatchSinkOptions options) { if (string.IsNullOrEmpty(options?.LogGroupName)) { @@ -79,10 +81,11 @@ public CloudWatchLogSink(IAmazonCloudWatchLogs cloudWatchClient, ICloudWatchSink if (options.TextFormatter == null) { - throw new System.ArgumentException($"{nameof(options.TextFormatter)} is required"); + throw new ArgumentException($"{nameof(options.TextFormatter)} is required"); } textFormatter = options.TextFormatter; + batchingSink = new(this, new() { BatchSizeLimit = options.BatchSizeLimit, Period = options.Period, QueueLimit = options.QueueSizeLimit }); } #pragma warning restore CS0618 @@ -340,7 +343,7 @@ private async Task PublishBatchAsync(List batch) /// Emit a batch of log events, running asynchronously. /// /// The events to emit. - protected override async Task EmitBatchAsync(IEnumerable events) + async Task IBatchedLogEventSink.EmitBatchAsync(IEnumerable events) { try { @@ -415,5 +418,25 @@ protected override async Task EmitBatchAsync(IEnumerable events) syncObject.Release(); } } + + Task IBatchedLogEventSink.OnEmptyBatchAsync() + { + throw new NotImplementedException(); + } + + public void Emit(LogEvent logEvent) + { + batchingSink.Emit(logEvent); + } + + public void Dispose() + { + batchingSink.Dispose(); + } + + public ValueTask DisposeAsync() + { + return batchingSink.DisposeAsync(); + } } } \ No newline at end of file diff --git a/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj b/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj index 2233c1b..677cbee 100644 --- a/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj +++ b/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj @@ -29,7 +29,7 @@ - - + + \ No newline at end of file diff --git a/test/Serilog.Sinks.AwsCloudWatch.Tests/CloudWatchLogsSinkExtensions.cs b/test/Serilog.Sinks.AwsCloudWatch.Tests/CloudWatchLogsSinkExtensions.cs index b16407c..1a04dbc 100644 --- a/test/Serilog.Sinks.AwsCloudWatch.Tests/CloudWatchLogsSinkExtensions.cs +++ b/test/Serilog.Sinks.AwsCloudWatch.Tests/CloudWatchLogsSinkExtensions.cs @@ -1,9 +1,7 @@ using Serilog.Events; -using System; using System.Collections.Generic; -using System.Linq; -using System.Reflection; using System.Threading.Tasks; +using Serilog.Sinks.PeriodicBatching; namespace Serilog.Sinks.AwsCloudWatch.Tests { @@ -17,8 +15,7 @@ public static class CloudWatchLogsSinkExtensions /// The task to wait on. public static Task EmitBatchAsync(this CloudWatchLogSink sink, IEnumerable events) { - var emitMethod = sink.GetType().GetMethod("EmitBatchAsync", BindingFlags.NonPublic | BindingFlags.Instance); - return emitMethod.Invoke(sink, new object[] { events }) as Task; + return ((IBatchedLogEventSink)sink).EmitBatchAsync(events); } } } From 977563c1c6c86863fa205bca082b8a576a65e0ca Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 15 Mar 2024 10:09:38 +1000 Subject: [PATCH 2/3] inheritdoc --- src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs b/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs index 21f25bd..4494b99 100644 --- a/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs +++ b/src/Serilog.Sinks.AwsCloudWatch/CloudWatchLogSink.cs @@ -419,21 +419,25 @@ async Task IBatchedLogEventSink.EmitBatchAsync(IEnumerable events) } } + /// Task IBatchedLogEventSink.OnEmptyBatchAsync() { - throw new NotImplementedException(); + return Task.CompletedTask; } + /// public void Emit(LogEvent logEvent) { batchingSink.Emit(logEvent); } + /// public void Dispose() { batchingSink.Dispose(); } + /// public ValueTask DisposeAsync() { return batchingSink.DisposeAsync(); From 578040da21998b9f4eaef8586dd482e9792b6c7e Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Sat, 16 Mar 2024 07:57:16 +1000 Subject: [PATCH 3/3] Bump minor version, maximize permissivity of package references --- .github/workflows/build.yml | 2 +- .../Serilog.Sinks.AwsCloudWatch.csproj | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 979166f..b12e6d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: env: NUGET_KEY: ${{ secrets.NUGET_KEY }} run: | - buildNumber="4.1.${GITHUB_RUN_NUMBER}" + buildNumber="4.2.${GITHUB_RUN_NUMBER}" sed "s/0.0.1/${buildNumber}/g" src/Serilog.Sinks.AwsCloudWatch/*.csproj -i dotnet pack -c Release -o artifacts || exit 1 dotnet nuget push artifacts/Serilog.Sinks.AwsCloudWatch.${buildNumber}.nupkg -s "https://api.nuget.org/v3/index.json" -k "$NUGET_KEY" diff --git a/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj b/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj index 677cbee..b63a48b 100644 --- a/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj +++ b/src/Serilog.Sinks.AwsCloudWatch/Serilog.Sinks.AwsCloudWatch.csproj @@ -29,7 +29,6 @@ - - + \ No newline at end of file