From 570489d50e5d5a1f41d31f5fcfd813d8486f46f5 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 28 Feb 2020 10:13:02 +1000 Subject: [PATCH 01/11] Dev version bump [skip ci] --- .../Serilog.Sinks.PeriodicBatching.csproj | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj b/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj index feeaf68..3d565c2 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj +++ b/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj @@ -1,8 +1,8 @@ - + The periodic batching sink for Serilog - 2.3.0 + 2.3.1 Serilog Contributors net45;netstandard1.1;netstandard1.2;netstandard2.0 true @@ -58,6 +58,4 @@ $(DefineConstants);THREADING_TIMER - - From 652318218699dbdbb282fad25bcd2efbd7e745f2 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Sat, 30 May 2020 12:35:46 +1000 Subject: [PATCH 02/11] Accept the NoQueueLimit constant in legacy ctors; mark those constructors and the constant obsolete. Fixes #45 --- .../PeriodicBatching/BoundedConcurrentQueue.cs | 2 +- .../PeriodicBatching/PeriodicBatchingSink.cs | 11 ++++++++--- .../PeriodicBatchingSinkTests.cs | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/BoundedConcurrentQueue.cs b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/BoundedConcurrentQueue.cs index 94e9ad4..2cb02fc 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/BoundedConcurrentQueue.cs +++ b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/BoundedConcurrentQueue.cs @@ -20,7 +20,7 @@ namespace Serilog.Sinks.PeriodicBatching { class BoundedConcurrentQueue { - public const int Unbounded = -1; + const int Unbounded = -1; readonly ConcurrentQueue _queue = new ConcurrentQueue(); readonly int _queueLimit; diff --git a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSink.cs b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSink.cs index 40b032b..78fefd7 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSink.cs +++ b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSink.cs @@ -37,9 +37,10 @@ namespace Serilog.Sinks.PeriodicBatching public class PeriodicBatchingSink : ILogEventSink, IDisposable, IBatchedLogEventSink { /// - /// Constant used to indicate that the internal queue shouldn't be limited. + /// Constant used with legacy constructor to indicate that the internal queue shouldn't be limited. /// - public const int NoQueueLimit = BoundedConcurrentQueue.Unbounded; + [Obsolete("Implement `IBatchedLogEventSink` and use the `PeriodicBatchingSinkOptions` constructor.")] + public const int NoQueueLimit = -1; readonly IBatchedLogEventSink _batchedLogEventSink; readonly int _batchSizeLimit; @@ -76,6 +77,7 @@ public PeriodicBatchingSink(IBatchedLogEventSink batchedSink, PeriodicBatchingSi /// /// The maximum number of events to include in a single batch. /// The time to wait between checking for event batches. + [Obsolete("Implement `IBatchedLogEventSink` and use the `PeriodicBatchingSinkOptions` constructor.")] protected PeriodicBatchingSink(int batchSizeLimit, TimeSpan period) : this(new PeriodicBatchingSinkOptions { @@ -97,13 +99,14 @@ protected PeriodicBatchingSink(int batchSizeLimit, TimeSpan period) /// The maximum number of events to include in a single batch. /// The time to wait between checking for event batches. /// Maximum number of events in the queue - use for an unbounded queue. + [Obsolete("Implement `IBatchedLogEventSink` and use the `PeriodicBatchingSinkOptions` constructor.")] protected PeriodicBatchingSink(int batchSizeLimit, TimeSpan period, int queueLimit) : this(new PeriodicBatchingSinkOptions { BatchSizeLimit = batchSizeLimit, Period = period, EagerlyEmitFirstEvent = true, - QueueLimit = queueLimit + QueueLimit = queueLimit == NoQueueLimit ? (int?)null : queueLimit }) { _batchedLogEventSink = this; @@ -199,6 +202,7 @@ protected virtual void EmitBatch(IEnumerable events) protected virtual async Task EmitBatchAsync(IEnumerable events) #pragma warning restore 1998 { + // ReSharper disable once MethodHasAsyncOverload EmitBatch(events); } @@ -337,6 +341,7 @@ protected virtual void OnEmptyBatch() protected virtual async Task OnEmptyBatchAsync() #pragma warning restore 1998 { + // ReSharper disable once MethodHasAsyncOverload OnEmptyBatch(); } diff --git a/test/Serilog.Sinks.PeriodicBatching.Tests/PeriodicBatchingSinkTests.cs b/test/Serilog.Sinks.PeriodicBatching.Tests/PeriodicBatchingSinkTests.cs index 6f19975..a514e8f 100644 --- a/test/Serilog.Sinks.PeriodicBatching.Tests/PeriodicBatchingSinkTests.cs +++ b/test/Serilog.Sinks.PeriodicBatching.Tests/PeriodicBatchingSinkTests.cs @@ -60,6 +60,16 @@ public void Dispose() } } + class NullBatchedSink : PeriodicBatchingSink + { + public NullBatchedSink(int batchSizeLimit, TimeSpan period, int queueLimit) +#pragma warning disable 618 + : base(batchSizeLimit, period, queueLimit) +#pragma warning restore 618 + { + } + } + public class PeriodicBatchingSinkTests { static readonly TimeSpan TinyWait = TimeSpan.FromMilliseconds(200); @@ -112,5 +122,13 @@ public void WhenAnEventIsEnqueuedItIsWrittenToABatch_FlushWhileRunning() Assert.True(bs.IsDisposed); Assert.False(bs.WasCalledAfterDisposal); } + + [Fact] + public void SubclassesCanBeConstructedUsingNoQueueLimitConstant() + { +#pragma warning disable 618 + var _ = new NullBatchedSink(batchSizeLimit: 100, TimeSpan.FromSeconds(2), queueLimit: PeriodicBatchingSink.NoQueueLimit); +#pragma warning restore 618 + } } } From 15648964d8e2fec9a8f41e9717f40c2bb533e3cd Mon Sep 17 00:00:00 2001 From: Mani Gandham Date: Sun, 31 May 2020 02:35:54 -0700 Subject: [PATCH 03/11] Fix the period batching property names This matches what the property names really are so the getting started example doesn't have build errors. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 56bf721..85a6977 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,10 @@ public static class LoggerSinkExampleConfiguration var batchingOptions = new PeriodicBatchingSinkOptions { - BatchSize = 100, + BatchSizeLimit = 100, Period = TimeSpan.FromSeconds(2), EagerlyEmitFirstEvent = true, - QueueSizeLimit = 10000 + QueueLimit = 10000 }; var batchingSink = new PeriodicBatchingSink(exampleSink, batchingOptions); From 74ad0f498fb8411c8cb3c7d0d7b4001d8ef839a9 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Mon, 1 Jun 2020 11:43:19 +1000 Subject: [PATCH 04/11] Unpin dotnet SDK version --- appveyor.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 03eb001..3fd1b87 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,12 +1,6 @@ version: '{build}' skip_tags: true image: Visual Studio 2019 -install: - - ps: mkdir -Force ".\build\" | Out-Null - - ps: Invoke-WebRequest "https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/dotnet-install.ps1" -OutFile ".\build\installcli.ps1" - - ps: $env:DOTNET_INSTALL_DIR = "$pwd\.dotnetcli" - - ps: '& .\build\installcli.ps1 -InstallDir "$env:DOTNET_INSTALL_DIR" -NoPath -Version 1.0.1' - - ps: $env:Path = "$env:DOTNET_INSTALL_DIR;$env:Path" build_script: - ps: ./Build.ps1 test: off From 40b743aea8da6d9c85059c63be13be642e0da5bc Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Tue, 2 Jun 2020 09:51:15 +1000 Subject: [PATCH 05/11] Update NuGet.org publishing key --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 3fd1b87..4f33b70 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,7 +9,7 @@ artifacts: deploy: - provider: NuGet api_key: - secure: N59tiJECUYpip6tEn0xvdmDAEiP9SIzyLEFLpwiigm/8WhJvBNs13QxzT1/3/JW/ + secure: K3/810hkTO6rd2AEHVkUQAadjGmDREus9k96QHu6hxrA1/wRTuAJemHMKtVVgIvf skip_symbols: true on: branch: /^(master|dev)$/ From 313598fd6c0747489c0fdf3949238dd75e60dae0 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Thu, 23 Jul 2020 13:27:40 +1000 Subject: [PATCH 06/11] Fixes #50, incorrect queue size limit documentation (docs only) --- .../Sinks/PeriodicBatching/PeriodicBatchingSinkOptions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSinkOptions.cs b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSinkOptions.cs index d0a8fbc..4bec61d 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSinkOptions.cs +++ b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PeriodicBatchingSinkOptions.cs @@ -40,8 +40,8 @@ public class PeriodicBatchingSinkOptions /// /// Maximum number of events to hold in the sink's internal queue, or null - /// for an unbounded queue. The default is 10000. + /// for an unbounded queue. The default is 100000. /// public int? QueueLimit { get; set; } = 100000; } -} \ No newline at end of file +} From 5eee2aa29034a3a5f32abbe4c441f0aa1c32fdf5 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Thu, 15 Oct 2020 20:05:47 -0700 Subject: [PATCH 07/11] Suppress ExecutionContext flowing to timer callbacks where available. --- .../Serilog.Sinks.PeriodicBatching.csproj | 32 ++++--------------- .../Sinks/PeriodicBatching/PortableTimer.cs | 9 ++++-- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj b/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj index 3d565c2..28671c7 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj +++ b/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj @@ -1,10 +1,10 @@ - + The periodic batching sink for Serilog 2.3.1 Serilog Contributors - net45;netstandard1.1;netstandard1.2;netstandard2.0 + net45;netstandard1.1;netstandard1.2;netstandard2.0;netstandard2.1 true Serilog.Sinks.PeriodicBatching Serilog @@ -20,7 +20,7 @@ git false - true + true @@ -32,30 +32,12 @@ - - - - - - - - - - - - - - - - $(DefineConstants);THREADING_TIMER - - $(DefineConstants);THREADING_TIMER - - - $(DefineConstants);THREADING_TIMER + + + $(DefineConstants);THREADING_TIMER;EXECUTION_CONTEXT - + diff --git a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PortableTimer.cs b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PortableTimer.cs index 7b5eb29..2752465 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PortableTimer.cs +++ b/src/Serilog.Sinks.PeriodicBatching/Sinks/PeriodicBatching/PortableTimer.cs @@ -40,7 +40,10 @@ public PortableTimer(Func onTick) _onTick = onTick; #if THREADING_TIMER - _timer = new Timer(_ => OnTick(), null, Timeout.Infinite, Timeout.Infinite); +#if EXECUTION_CONTEXT + using (ExecutionContext.SuppressFlow()) +#endif + _timer = new Timer(_ => OnTick(), null, Timeout.Infinite, Timeout.Infinite); #endif } @@ -88,7 +91,7 @@ async void OnTick() { return; } - } + } _running = true; } @@ -115,7 +118,7 @@ async void OnTick() public void Dispose() { _cancel.Cancel(); - + lock (_stateLock) { if (_disposed) From 8b6854b7158366ff2a750bd248edf018f8d21c93 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 26 Oct 2020 09:47:44 -0700 Subject: [PATCH 08/11] Removed DisableImplicitFrameworkReferences from csproj. --- .../Serilog.Sinks.PeriodicBatching.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj b/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj index 28671c7..601b6c0 100644 --- a/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj +++ b/src/Serilog.Sinks.PeriodicBatching/Serilog.Sinks.PeriodicBatching.csproj @@ -19,8 +19,6 @@ https://github.com/serilog/serilog-sinks-periodicbatching git false - - true From b4441403b3f36baf0f8aa4f1663f477b738d15ea Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Sat, 8 Jan 2022 09:14:33 +1000 Subject: [PATCH 09/11] Branch name change [skip ci] --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 4f33b70..460cb85 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,11 +12,11 @@ deploy: secure: K3/810hkTO6rd2AEHVkUQAadjGmDREus9k96QHu6hxrA1/wRTuAJemHMKtVVgIvf skip_symbols: true on: - branch: /^(master|dev)$/ + branch: /^(main|dev)$/ - provider: GitHub auth_token: secure: p4LpVhBKxGS5WqucHxFQ5c7C8cP74kbNB0Z8k9Oxx/PMaDQ1+ibmoexNqVU5ZlmX artifact: /Serilog.*\.nupkg/ tag: v$(appveyor_build_version) on: - branch: master + branch: main From 1df2d94e204bff8b2269d60f9e2deb733e326b08 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Sat, 8 Jan 2022 09:15:01 +1000 Subject: [PATCH 10/11] Branch name change [skip ci] --- Build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Build.ps1 b/Build.ps1 index 1694abc..07fcb2c 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -6,7 +6,7 @@ if(Test-Path .\artifacts) { Remove-Item .\artifacts -Force -Recurse } $branch = @{ $true = $env:APPVEYOR_REPO_BRANCH; $false = $(git symbolic-ref --short -q HEAD) }[$env:APPVEYOR_REPO_BRANCH -ne $NULL]; $revision = @{ $true = "{0:00000}" -f [convert]::ToInt32("0" + $env:APPVEYOR_BUILD_NUMBER, 10); $false = "local" }[$env:APPVEYOR_BUILD_NUMBER -ne $NULL]; -$suffix = @{ $true = ""; $false = "$branch-$revision"}[$branch -eq "master" -and $revision -ne "local"] +$suffix = @{ $true = ""; $false = "$branch-$revision"}[$branch -eq "main" -and $revision -ne "local"] foreach ($src in ls src/Serilog.*) { Push-Location $src From af4c70636f90058c6edb529cf165ae6668e314f1 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Sat, 8 Jan 2022 09:18:44 +1000 Subject: [PATCH 11/11] Update NuGet.org API key --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 460cb85..37b11c9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,7 +9,7 @@ artifacts: deploy: - provider: NuGet api_key: - secure: K3/810hkTO6rd2AEHVkUQAadjGmDREus9k96QHu6hxrA1/wRTuAJemHMKtVVgIvf + secure: rbdBqxBpLt4MkB+mrDOYNDOd8aVZ1zMkysaVNAXNKnC41FYifzX3l9LM8DCrUWU5 skip_symbols: true on: branch: /^(main|dev)$/