From ae084a11bc546d47c28d800f99bb5cfe7c0aa201 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 3 May 2019 09:42:16 +1000 Subject: [PATCH 01/25] Dev version bump [skip ci] --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 63689c1..7f327a7 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -2,7 +2,7 @@ Enrich Serilog events with properties from the current thread. - 3.1.0 + 3.1.1 Serilog Contributors net45;netstandard1.0;netstandard2.0 true From 196d05d5e329d57997967fed87aee358fb38fd9f Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Sat, 4 May 2019 20:32:00 +0300 Subject: [PATCH 02/25] code cleanup --- serilog-enrichers-thread.sln | 1 - .../Enrichers/ThreadIdEnricher.cs | 1 - .../Enrichers/ThreadNameEnricher.cs | 3 +-- .../ThreadLoggerConfigurationExtensions.cs | 9 +++++---- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/serilog-enrichers-thread.sln b/serilog-enrichers-thread.sln index d577d7a..9efe3c6 100644 --- a/serilog-enrichers-thread.sln +++ b/serilog-enrichers-thread.sln @@ -9,7 +9,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{E9D1B5 ProjectSection(SolutionItems) = preProject Build.ps1 = Build.ps1 global.json = global.json - NuGet.Config = NuGet.Config README.md = README.md assets\Serilog.snk = assets\Serilog.snk EndProjectSection diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs index 959877f..656cce7 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -using System.Threading; using Serilog.Core; using Serilog.Events; using System; diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs index ff098cb..92ac313 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs @@ -19,9 +19,8 @@ namespace Serilog.Enrichers { - /// - /// Enriches log events with a ThreadName property containing the + /// Enriches log events with a ThreadName property containing the . /// public class ThreadNameEnricher : ILogEventEnricher { diff --git a/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs b/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs index 7ca9b55..41fb4f3 100644 --- a/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs +++ b/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs @@ -21,7 +21,7 @@ namespace Serilog { /// - /// Extends to add enrichers for . + /// Extends to add enrichers for /// capabilities. /// public static class ThreadLoggerConfigurationExtensions @@ -31,7 +31,7 @@ public static class ThreadLoggerConfigurationExtensions /// /// Logger enrichment configuration. /// Configuration object allowing method chaining. - /// + /// If is null. public static LoggerConfiguration WithThreadId( this LoggerEnrichmentConfiguration enrichmentConfiguration) { @@ -43,8 +43,9 @@ public static LoggerConfiguration WithThreadId( /// /// Enrich log events with a ThreadName property containing the . /// - /// - /// + /// Logger enrichment configuration. + /// Configuration object allowing method chaining. + /// If is null. public static LoggerConfiguration WithThreadName( this LoggerEnrichmentConfiguration enrichmentConfiguration) { From 71e875f408c47cd1d2b33badf963d7c12f21b4fa Mon Sep 17 00:00:00 2001 From: Stefan Ossendorf Date: Fri, 31 May 2019 16:46:11 +0200 Subject: [PATCH 03/25] WithThreadName() added to readme --- README.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bd8781c..32eeed5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Serilog.Enrichers.Thread [![Build status](https://ci.appveyor.com/api/projects/status/2vgxdy3swg6eaj3f?svg=true)](https://ci.appveyor.com/project/serilog/serilog-enrichers-thread) [![NuGet Version](http://img.shields.io/nuget/v/Serilog.Enrichers.Thread.svg?style=flat)](https://www.nuget.org/packages/Serilog.Enrichers.Thread/) Enrich Serilog events with properties from the current thread. + +`WithThreadName()` is only supported in .NetStandard 2.0 and .NetFramework 4.5. ### Getting started @@ -10,13 +12,15 @@ Install the package from NuGet: Install-Package Serilog.Enrichers.Thread ``` -In your logger configuration, apply `Enrich.WithThreadId()`: +In your logger configuration, apply `Enrich.WithThreadId()` and `Enrich.WithThreadName()`: ```csharp Log.Logger = new LoggerConfiguration() .Enrich.WithThreadId() + .Enrich.WithThreadName() .CreateLogger(); ``` + Many sinks simply include all properties without further action required, so the thread id will be logged automatically. However, some sinks, such as the File and Console sinks use an output template and the new ThreadId may not be automatically output in your sink. In this case, in order for the ThreadId to show up in the logging, you will need to create or modify your output template. @@ -24,7 +28,7 @@ However, some sinks, such as the File and Console sinks use an output template a w.File(...., outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {Properties}{NewLine}{Exception}") ``` -Here, {Properties} can include not only ThreadId, but any other enrichment which is applied. Alternatively, {ThreadId} could be used instead, if you want to only add the thread id enrichment. +Here, {Properties} can include not only ThreadId, but any other enrichment which is applied. Alternatively, {ThreadId} could be used instead, if you want to only add the thread id enrichment or {ThreadName}, if you want to only add the thread name enrichment. An example, which also uses the Serilogs.Sinks.Async Nuget package, is below: @@ -32,15 +36,15 @@ An example, which also uses the Serilogs.Sinks.Async Nuget package, is below: var logger = Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console(restrictedToMinimumLevel:Serilog.Events.LogEventLevel.Information) - .WriteTo.Async(w=>w.File("..\\..\\..\\..\\logs\\SerilogLogFile.json", rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} <{ThreadId}>{NewLine}{Exception}")) + .WriteTo.Async(w=>w.File("..\\..\\..\\..\\logs\\SerilogLogFile.json", rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} <{ThreadId}><{ThreadName}>{NewLine}{Exception}")) .Enrich.WithThreadId() .CreateLogger(); ``` Which would produce an output in the log file as follows: ``` -2018-04-06 13:12:45.684 +02:00 [ERR] The file file_name.svg does not exist <4> +2018-04-06 13:12:45.684 +02:00 [ERR] The file file_name.svg does not exist <4> ``` -Where, <4> is an example thread id. +Where, <4> is an example thread id and is an example thread name. To use the enricher, first install the NuGet package: @@ -48,5 +52,17 @@ To use the enricher, first install the NuGet package: Install-Package Serilog.Enrichers.Thread ``` +Note: +The {ThreadName} property will only be attached when it is not null. Otherwise it will be omitted. +If you want to get this property always attached you can use the following: +```csharp +using Serilog.Enrichers; + +Log.Logger = new LoggerConfiguration() + .Enrich.WithThreadName() + .Enrich.WithProperty(ThreadNameEnricher.ThreadNamePropertyName, "MyDefault") + .CreateLogger(); +``` +The enrichment order is important. Otherwise "MyDefault" would always win. Copyright © 2016 Serilog Contributors - Provided under the [Apache License, Version 2.0](http://apache.org/licenses/LICENSE-2.0.html). From 7b72dc866fb7954ca239d4c584c60136d850f6db Mon Sep 17 00:00:00 2001 From: Stefan Ossendorf Date: Fri, 31 May 2019 16:51:22 +0200 Subject: [PATCH 04/25] Example completed Readme added & example fixed to reflect out of the box usage. --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 32eeed5..d4e0d26 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,19 @@ Log.Logger = new LoggerConfiguration() ``` Many sinks simply include all properties without further action required, so the thread id will be logged automatically. -However, some sinks, such as the File and Console sinks use an output template and the new ThreadId may not be automatically output in your sink. In this case, in order for the ThreadId to show up in the logging, you will need to create or modify your output template. +However, some sinks, such as the File and Console sinks use an output template and the new ThreadId may not be automatically output in your sink. In this case, in order for the ThreadId or ThreadName to show up in the logging, you will need to create or modify your output template. ```csharp w.File(...., outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {Properties}{NewLine}{Exception}") ``` -Here, {Properties} can include not only ThreadId, but any other enrichment which is applied. Alternatively, {ThreadId} could be used instead, if you want to only add the thread id enrichment or {ThreadName}, if you want to only add the thread name enrichment. +Here, {Properties} can include not only ThreadId and ThreadName, but any other enrichment which is applied. Alternatively, {ThreadId} could be used instead, if you want to only add the thread id enrichment and {ThreadName}, if you want to only add the thread name enrichment. An example, which also uses the Serilogs.Sinks.Async Nuget package, is below: ```csharp + Thread.CurrentThread.Name = "MyWorker"; + var logger = Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console(restrictedToMinimumLevel:Serilog.Events.LogEventLevel.Information) From a30040a6fb7901d05e4de7c940ab4cdb7e5440df Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Mon, 24 Jun 2019 08:14:40 +1000 Subject: [PATCH 05/25] Dev version bump [skip ci] --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 7f327a7..59e0a05 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -2,7 +2,7 @@ Enrich Serilog events with properties from the current thread. - 3.1.1 + 3.2.0 Serilog Contributors net45;netstandard1.0;netstandard2.0 true From 2a4b62d267ab624b8323fbca29375b52d0f6e4d1 Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Mon, 2 Sep 2019 14:45:39 +0300 Subject: [PATCH 06/25] add simple caching into enrichers fix readme formatting --- README.md | 8 ++++---- .../Enrichers/ThreadIdEnricher.cs | 14 +++++++++++++- .../Enrichers/ThreadNameEnricher.cs | 12 +++++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d4e0d26..84c0264 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,13 @@ Log.Logger = new LoggerConfiguration() ``` Many sinks simply include all properties without further action required, so the thread id will be logged automatically. -However, some sinks, such as the File and Console sinks use an output template and the new ThreadId may not be automatically output in your sink. In this case, in order for the ThreadId or ThreadName to show up in the logging, you will need to create or modify your output template. +However, some sinks, such as the File and Console sinks use an output template and the new `ThreadId` may not be automatically output in your sink. In this case, in order for the `ThreadId` or `ThreadName` to show up in the logging, you will need to create or modify your output template. ```csharp w.File(...., outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {Properties}{NewLine}{Exception}") ``` -Here, {Properties} can include not only ThreadId and ThreadName, but any other enrichment which is applied. Alternatively, {ThreadId} could be used instead, if you want to only add the thread id enrichment and {ThreadName}, if you want to only add the thread name enrichment. +Here, \{Properties} can include not only `ThreadId` and `ThreadName`, but any other enrichment which is applied. Alternatively, \{ThreadId} could be used instead, if you want to only add the thread id enrichment and \{ThreadName}, if you want to only add the thread name enrichment. An example, which also uses the Serilogs.Sinks.Async Nuget package, is below: @@ -46,7 +46,7 @@ An example, which also uses the Serilogs.Sinks.Async Nuget package, is below: ``` 2018-04-06 13:12:45.684 +02:00 [ERR] The file file_name.svg does not exist <4> ``` -Where, <4> is an example thread id and is an example thread name. +Where, <4> is an example thread id and \ is an example thread name. To use the enricher, first install the NuGet package: @@ -55,7 +55,7 @@ Install-Package Serilog.Enrichers.Thread ``` Note: -The {ThreadName} property will only be attached when it is not null. Otherwise it will be omitted. +The \{ThreadName} property will only be attached when it is not null. Otherwise it will be omitted. If you want to get this property always attached you can use the following: ```csharp using Serilog.Enrichers; diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs index 656cce7..a19dc94 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs @@ -28,6 +28,11 @@ public class ThreadIdEnricher : ILogEventEnricher /// public const string ThreadIdPropertyName = "ThreadId"; + /// + /// The cached last created "ThreadId" property with some thread id. It is likely to be reused frequently so avoiding heap allocations. + /// + private LogEventProperty _lastValue; + /// /// Enrich the log event. /// @@ -35,7 +40,14 @@ public class ThreadIdEnricher : ILogEventEnricher /// Factory for creating new properties to add to the event. public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) { - logEvent.AddPropertyIfAbsent(new LogEventProperty(ThreadIdPropertyName, new ScalarValue(Environment.CurrentManagedThreadId))); + var threadId = Environment.CurrentManagedThreadId; + + var last = _lastValue; + if (last == null || (int)((ScalarValue)last.Value).Value != threadId) + // no need to synchronize threads on write - just some of them will win + _lastValue = last = new LogEventProperty(ThreadIdPropertyName, new ScalarValue(threadId)); + + logEvent.AddPropertyIfAbsent(last); } } } diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs index 92ac313..cffa6c0 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs @@ -29,6 +29,11 @@ public class ThreadNameEnricher : ILogEventEnricher /// public const string ThreadNamePropertyName = "ThreadName"; + /// + /// The cached last created "ThreadName" property with some thread name. It is likely to be reused frequently so avoiding heap allocations. + /// + private LogEventProperty _lastValue; + /// /// Enrich the log event. /// @@ -39,7 +44,12 @@ public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) var threadName = Thread.CurrentThread.Name; if (threadName != null) { - logEvent.AddPropertyIfAbsent(new LogEventProperty(ThreadNamePropertyName, new ScalarValue(threadName))); + var last = _lastValue; + if (last == null || (string)((ScalarValue)last.Value).Value != threadName) + // no need to synchronize threads on write - just some of them will win + _lastValue = last = new LogEventProperty(ThreadNamePropertyName, new ScalarValue(threadName)); + + logEvent.AddPropertyIfAbsent(last); } } } From aae2678e8fe6ed701315fab81f1375da26793690 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Sat, 13 Feb 2021 15:54:43 +0000 Subject: [PATCH 07/25] Update CI build to VS 2019 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 396e0ef..f7194df 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ version: '{build}' skip_tags: true -image: Visual Studio 2017 +image: Visual Studio 2019 configuration: Release build_script: - ps: ./Build.ps1 From 82cc03de2edd62003690718c1d11793ed2b4bd6b Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Sat, 13 Feb 2021 15:57:02 +0000 Subject: [PATCH 08/25] Replace PackageLicenseUrl with PackageLicenseExpression --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 59e0a05..6888850 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -1,4 +1,4 @@ - + Enrich Serilog events with properties from the current thread. @@ -15,7 +15,7 @@ serilog;thread;enricher http://serilog.net/images/serilog-enricher-nuget.png http://serilog.net - http://www.apache.org/licenses/LICENSE-2.0 + Apache-2.0 false From cd042be03cc3f24b7966c7a4c6daa957d17543f0 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Sat, 13 Feb 2021 16:01:42 +0000 Subject: [PATCH 09/25] Replace PackageIconUrl with PackageIcon --- assets/serilog-enricher-nuget.png | Bin 0 -> 21569 bytes .../Serilog.Enrichers.Thread.csproj | 9 ++++++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 assets/serilog-enricher-nuget.png diff --git a/assets/serilog-enricher-nuget.png b/assets/serilog-enricher-nuget.png new file mode 100644 index 0000000000000000000000000000000000000000..0a1173e6bfc2389237ca135e98e3c479296f1e17 GIT binary patch literal 21569 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 literal 0 HcmV?d00001 diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 6888850..29dfeaf 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -13,7 +13,7 @@ true Serilog.Enrichers.Thread serilog;thread;enricher - http://serilog.net/images/serilog-enricher-nuget.png + serilog-enricher-nuget.png http://serilog.net Apache-2.0 false @@ -28,6 +28,13 @@ + + + True + + + + $(DefineConstants);THREAD_NAME From e45190a01c9346c14f184df02ffd690ecd3e1a78 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 26 Feb 2021 10:14:40 +1000 Subject: [PATCH 10/25] NuGet key - fixes #19 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index f7194df..023657b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,7 +10,7 @@ artifacts: deploy: - provider: NuGet api_key: - secure: N59tiJECUYpip6tEn0xvdmDAEiP9SIzyLEFLpwiigm/8WhJvBNs13QxzT1/3/JW/ + secure: WVqtsWe7l+ql+aKkqPJriPKlg1zDyNyka4N1Z4X36LzfEMT8/WMg1p3ipXKkjSOE skip_symbols: true on: branch: /^(master|dev)$/ From e7af1352456da2f812a474dce277eacb6e0b0e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Dom=C3=ADnguez?= Date: Fri, 7 May 2021 18:11:46 +0200 Subject: [PATCH 11/25] Update Serilog dependency version --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 29dfeaf..a9bd8d6 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -20,7 +20,7 @@ - + From a81eac087b7596fa2dec0fa6b1f72d1aa3783cdb Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 4 Feb 2023 06:49:03 +1100 Subject: [PATCH 12/25] build on VS 2022 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 023657b..fbdbaf8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ version: '{build}' skip_tags: true -image: Visual Studio 2019 +image: Visual Studio 2022 configuration: Release build_script: - ps: ./Build.ps1 From f51900f452ea9f76e9031862d0f2bc49adda60e1 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Sun, 12 Nov 2023 11:12:21 +0000 Subject: [PATCH 13/25] Enable nullability annotations in the project --- src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs | 2 +- src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs | 2 +- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs index a19dc94..2ad07e5 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs @@ -31,7 +31,7 @@ public class ThreadIdEnricher : ILogEventEnricher ///

/// The cached last created "ThreadId" property with some thread id. It is likely to be reused frequently so avoiding heap allocations. /// - private LogEventProperty _lastValue; + private LogEventProperty? _lastValue; /// /// Enrich the log event. diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs index cffa6c0..d9b8cf4 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs @@ -32,7 +32,7 @@ public class ThreadNameEnricher : ILogEventEnricher /// /// The cached last created "ThreadName" property with some thread name. It is likely to be reused frequently so avoiding heap allocations. /// - private LogEventProperty _lastValue; + private LogEventProperty? _lastValue; /// /// Enrich the log event. diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index a9bd8d6..aa25c84 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -17,6 +17,8 @@ http://serilog.net Apache-2.0 false + latest + enable From db33d4fa732fb431c8b12b3293f3a2a6e4531065 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Tue, 14 Nov 2023 16:01:54 +1000 Subject: [PATCH 14/25] New publishing key --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index fbdbaf8..622198d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,7 +10,7 @@ artifacts: deploy: - provider: NuGet api_key: - secure: WVqtsWe7l+ql+aKkqPJriPKlg1zDyNyka4N1Z4X36LzfEMT8/WMg1p3ipXKkjSOE + secure: Fh92tRIFbe1FAiyD8lTThWgAorQ1vV+eFYMlUK0iLHBBenJcy/UYc1qj6kgHvUcO skip_symbols: true on: branch: /^(master|dev)$/ From 71d19787aecb9bf4a6697120772d81f45608823f Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 10:13:35 +0100 Subject: [PATCH 15/25] Update TFMs --- global.json | 1 - .../Enrichers/ThreadNameEnricher.cs | 2 -- .../Serilog.Enrichers.Thread.csproj | 20 ++++++------------- .../ThreadLoggerConfigurationExtensions.cs | 3 --- 4 files changed, 6 insertions(+), 20 deletions(-) delete mode 100644 global.json diff --git a/global.json b/global.json deleted file mode 100644 index 31a5f7f..0000000 --- a/global.json +++ /dev/null @@ -1 +0,0 @@ -{"projects":["src","test"]} \ No newline at end of file diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs index d9b8cf4..609b316 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#if THREAD_NAME using System.Threading; using Serilog.Core; using Serilog.Events; @@ -54,4 +53,3 @@ public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) } } } -#endif \ No newline at end of file diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index aa25c84..b3f2a6d 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -4,7 +4,12 @@ Enrich Serilog events with properties from the current thread. 3.2.0 Serilog Contributors - net45;netstandard1.0;netstandard2.0 + + net471;net462 + + $(TargetFrameworks);net8.0;net6.0;netstandard2.0 true true Serilog.Enrichers.Thread @@ -25,11 +30,6 @@ - - - - - True @@ -37,12 +37,4 @@ - - $(DefineConstants);THREAD_NAME - - - - $(DefineConstants);THREAD_NAME - - diff --git a/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs b/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs index 41fb4f3..9ff10c5 100644 --- a/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs +++ b/src/Serilog.Enrichers.Thread/ThreadLoggerConfigurationExtensions.cs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - using System; using System.Threading; using Serilog.Configuration; @@ -39,7 +38,6 @@ public static LoggerConfiguration WithThreadId( return enrichmentConfiguration.With(); } -#if THREAD_NAME /// /// Enrich log events with a ThreadName property containing the . /// @@ -52,6 +50,5 @@ public static LoggerConfiguration WithThreadName( if (enrichmentConfiguration == null) throw new ArgumentNullException(nameof(enrichmentConfiguration)); return enrichmentConfiguration.With(); } -#endif } } From 5b2ce01c952763a3815ae009237e1a6419df9585 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 10:35:05 +0100 Subject: [PATCH 16/25] Update to Serilog 4 --- src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs | 2 +- src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs | 4 ++-- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs index 2ad07e5..903cd91 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs @@ -43,7 +43,7 @@ public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) var threadId = Environment.CurrentManagedThreadId; var last = _lastValue; - if (last == null || (int)((ScalarValue)last.Value).Value != threadId) + if (last is null || (int)((ScalarValue)last.Value).Value! != threadId) // no need to synchronize threads on write - just some of them will win _lastValue = last = new LogEventProperty(ThreadIdPropertyName, new ScalarValue(threadId)); diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs index 609b316..b0bf499 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs @@ -41,10 +41,10 @@ public class ThreadNameEnricher : ILogEventEnricher public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) { var threadName = Thread.CurrentThread.Name; - if (threadName != null) + if (threadName is not null) { var last = _lastValue; - if (last == null || (string)((ScalarValue)last.Value).Value != threadName) + if (last is null || (string)((ScalarValue)last.Value).Value! != threadName) // no need to synchronize threads on write - just some of them will win _lastValue = last = new LogEventProperty(ThreadNamePropertyName, new ScalarValue(threadName)); diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index b3f2a6d..89ba9a7 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -27,7 +27,7 @@ - + From b33c2d588d0ed9cc4923cd6421a6d2b5f0bbe9a9 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 10:38:37 +0100 Subject: [PATCH 17/25] Internalize and seal enricher classes --- src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs | 4 ++-- src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs index 903cd91..ad683ea 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadIdEnricher.cs @@ -21,12 +21,12 @@ namespace Serilog.Enrichers /// /// Enriches log events with a ThreadId property containing the . /// - public class ThreadIdEnricher : ILogEventEnricher + sealed class ThreadIdEnricher : ILogEventEnricher { /// /// The property name added to enriched log events. /// - public const string ThreadIdPropertyName = "ThreadId"; + const string ThreadIdPropertyName = "ThreadId"; /// /// The cached last created "ThreadId" property with some thread id. It is likely to be reused frequently so avoiding heap allocations. diff --git a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs index b0bf499..7bf4ab3 100644 --- a/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs +++ b/src/Serilog.Enrichers.Thread/Enrichers/ThreadNameEnricher.cs @@ -21,12 +21,12 @@ namespace Serilog.Enrichers /// /// Enriches log events with a ThreadName property containing the . /// - public class ThreadNameEnricher : ILogEventEnricher + sealed class ThreadNameEnricher : ILogEventEnricher { /// /// The property name added to enriched log events. /// - public const string ThreadNamePropertyName = "ThreadName"; + const string ThreadNamePropertyName = "ThreadName"; /// /// The cached last created "ThreadName" property with some thread name. It is likely to be reused frequently so avoiding heap allocations. From a680e479d26e0d6fd44a3b254e2f64a8f5ca0cc0 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 10:42:26 +0100 Subject: [PATCH 18/25] Remove AssemblyInfo.cs --- serilog-enrichers-thread.sln | 5 ++--- src/Serilog.Enrichers.Thread/Properties/AssemblyInfo.cs | 6 ------ 2 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 src/Serilog.Enrichers.Thread/Properties/AssemblyInfo.cs diff --git a/serilog-enrichers-thread.sln b/serilog-enrichers-thread.sln index 9efe3c6..5b1edc3 100644 --- a/serilog-enrichers-thread.sln +++ b/serilog-enrichers-thread.sln @@ -1,14 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.329 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.34928.147 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{037440DE-440B-4129-9F7A-09B42D00397E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{E9D1B5E1-DEB9-4A04-8BAB-24EC7240ADAF}" ProjectSection(SolutionItems) = preProject Build.ps1 = Build.ps1 - global.json = global.json README.md = README.md assets\Serilog.snk = assets\Serilog.snk EndProjectSection diff --git a/src/Serilog.Enrichers.Thread/Properties/AssemblyInfo.cs b/src/Serilog.Enrichers.Thread/Properties/AssemblyInfo.cs deleted file mode 100644 index e6a0a37..0000000 --- a/src/Serilog.Enrichers.Thread/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,6 +0,0 @@ -using System; -using System.Reflection; - -[assembly: AssemblyVersion("2.0.0.0")] - -[assembly: CLSCompliant(true)] From bc89a837417e83589568acf177e00549000c1cfa Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 10:43:55 +0100 Subject: [PATCH 19/25] Remove note about WithThreadName() only working on some .NET versions as it works on all currently supported TFMs --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 84c0264..8b2313a 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ Enrich Serilog events with properties from the current thread. -`WithThreadName()` is only supported in .NetStandard 2.0 and .NetFramework 4.5. - ### Getting started Install the package from NuGet: From 14cf77885ac2e3c3386a5ce14b6746ff000c689c Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 10:52:33 +0100 Subject: [PATCH 20/25] Add the readme file to the nuget package --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 89ba9a7..d4ea0cb 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -21,6 +21,7 @@ serilog-enricher-nuget.png http://serilog.net Apache-2.0 + README.md false latest enable @@ -35,6 +36,7 @@ True + From 4310b3476d8119a4ea9b0bc7b595c49cd7622e36 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Tue, 11 Jun 2024 11:59:13 +0100 Subject: [PATCH 21/25] Set version to 4.0 --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index d4ea0cb..73f0116 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -2,7 +2,7 @@ Enrich Serilog events with properties from the current thread. - 3.2.0 + 4.0.0 Serilog Contributors net471;net462 From cf57f9ff651a660d32ca86fc8d52a5f060bd61c3 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Thu, 13 Jun 2024 08:12:04 +0100 Subject: [PATCH 22/25] Remove GenerateAssemblyVersionAttribute=false --- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 73f0116..4a23255 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -3,6 +3,7 @@ Enrich Serilog events with properties from the current thread. 4.0.0 + 4.0.0.0 Serilog Contributors net471;net462 @@ -22,7 +23,6 @@ http://serilog.net Apache-2.0 README.md - false latest enable From 3d45aceaf78d5553dd202378b7f1e35a8ad870a2 Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Thu, 13 Jun 2024 13:40:50 +0100 Subject: [PATCH 23/25] Publish a .snupkg --- Build.ps1 | 2 +- appveyor.yml | 5 ++++- src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Build.ps1 b/Build.ps1 index b13c813..e716541 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -20,7 +20,7 @@ foreach ($src in ls src/*) { echo "build: Packaging project in $src" - & dotnet pack -c Release -o ..\..\artifacts --version-suffix=$suffix + & dotnet pack -c Release -o ..\..\artifacts --version-suffix=$suffix -p:ContinuousIntegrationBuild=true if($LASTEXITCODE -ne 0) { exit 1 } Pop-Location diff --git a/appveyor.yml b/appveyor.yml index 622198d..4d88b8d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,6 +7,7 @@ build_script: test: off artifacts: - path: artifacts/Serilog.*.nupkg +- path: artifacts/Serilog.*.snupkg deploy: - provider: NuGet api_key: @@ -17,7 +18,9 @@ deploy: - provider: GitHub auth_token: secure: p4LpVhBKxGS5WqucHxFQ5c7C8cP74kbNB0Z8k9Oxx/PMaDQ1+ibmoexNqVU5ZlmX - artifact: /Serilog.*\.nupkg/ + artifacts: + /Serilog.*\.nupkg/ + /Serilog.*\.snupkg/ tag: v$(appveyor_build_version) on: branch: master diff --git a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj index 4a23255..67eea47 100644 --- a/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj +++ b/src/Serilog.Enrichers.Thread/Serilog.Enrichers.Thread.csproj @@ -23,6 +23,10 @@ http://serilog.net Apache-2.0 README.md + true + true + true + snupkg latest enable From a0709183d559ff8f56ca1c77de28ab08cb713ef2 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 14 Jun 2024 18:30:16 +1000 Subject: [PATCH 24/25] Branch name in build.ps1 --- Build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Build.ps1 b/Build.ps1 index e716541..c265894 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -11,7 +11,7 @@ if(Test-Path .\artifacts) { $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.Substring(0, [math]::Min(10,$branch.Length)))-$revision"}[$branch -eq "master" -and $revision -ne "local"] +$suffix = @{ $true = ""; $false = "$($branch.Substring(0, [math]::Min(10,$branch.Length)))-$revision"}[$branch -eq "main" -and $revision -ne "local"] echo "build: Version suffix is $suffix" From a6925157f9fa4d5f93324220c4bba9dd0ab41509 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 14 Jun 2024 18:32:04 +1000 Subject: [PATCH 25/25] Update publishing key, branch names --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 4d88b8d..90138f6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ deploy: secure: Fh92tRIFbe1FAiyD8lTThWgAorQ1vV+eFYMlUK0iLHBBenJcy/UYc1qj6kgHvUcO skip_symbols: true on: - branch: /^(master|dev)$/ + branch: /^(main|dev)$/ - provider: GitHub auth_token: secure: p4LpVhBKxGS5WqucHxFQ5c7C8cP74kbNB0Z8k9Oxx/PMaDQ1+ibmoexNqVU5ZlmX @@ -23,4 +23,4 @@ deploy: /Serilog.*\.snupkg/ tag: v$(appveyor_build_version) on: - branch: master + branch: main