diff --git a/appveyor.yml b/appveyor.yml index fbc0ddb0..bf291da7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 1.0.{build} +version: 1.7.0-{build} image: Visual Studio 2019 configuration: Release skip_tags: true @@ -38,6 +38,6 @@ test_script: deploy: - provider: NuGet api_key: - secure: N/3SLEg4r4QlbIVrI6epIHgv2KfwkwkrIUeLRyqS8D3AkC29Ql86NMkHxWOfcmUM + secure: 5tuxbM+Ujp0ZtaDCGYET23qKr6bJWo/Vzxlf7uTbspaf8R1R7sIe1JqSDHZoK1gV on: - branch: master + branch: v1.7 diff --git a/build.ps1 b/build.ps1 index 88615165..d7885978 100644 --- a/build.ps1 +++ b/build.ps1 @@ -2,7 +2,7 @@ # creates NuGet package at \artifacts dotnet --version -$versionPrefix = "1.7.4" +$versionPrefix = "1.7.5" $versionSuffix = "" $versionFile = $versionPrefix + "." + ${env:APPVEYOR_BUILD_NUMBER} $versionProduct = $versionPrefix; diff --git a/src/NLog.Extensions.Logging/Config/NLogLoggingConfiguration.cs b/src/NLog.Extensions.Logging/Config/NLogLoggingConfiguration.cs index 7aa55911..59616dbf 100644 --- a/src/NLog.Extensions.Logging/Config/NLogLoggingConfiguration.cs +++ b/src/NLog.Extensions.Logging/Config/NLogLoggingConfiguration.cs @@ -175,7 +175,7 @@ private IEnumerable> GetValues() { yield return new KeyValuePair("type", GetConfigKey(_configurationSection)); } - else + else if (!_topElement) { yield return new KeyValuePair("name", GetConfigKey(_configurationSection)); } diff --git a/src/NLog.Extensions.Logging/LayoutRenderers/MicrosoftConsoleLayoutRenderer.cs b/src/NLog.Extensions.Logging/LayoutRenderers/MicrosoftConsoleLayoutRenderer.cs index 79b7edb7..74c1b2fb 100644 --- a/src/NLog.Extensions.Logging/LayoutRenderers/MicrosoftConsoleLayoutRenderer.cs +++ b/src/NLog.Extensions.Logging/LayoutRenderers/MicrosoftConsoleLayoutRenderer.cs @@ -22,21 +22,9 @@ protected override void Append(StringBuilder builder, LogEventInfo logEvent) builder.Append(microsoftLogLevel); builder.Append(": "); builder.Append(logEvent.LoggerName); - builder.Append("["); - int eventId = 0; - if (logEvent.HasProperties && logEvent.Properties.TryGetValue("EventId_Id", out var eventIdValue)) - { - if (eventIdValue is int) - eventId = (int)eventIdValue; - else if (!int.TryParse(eventIdValue?.ToString() ?? string.Empty, out eventId)) - eventId = 0; - } - else - { - eventId = 0; - } - builder.Append(ConvertEventId(eventId)); - builder.Append("]"); + builder.Append('['); + AppendEventId(LookupEventId(logEvent), builder); + builder.Append(']'); builder.Append(System.Environment.NewLine); builder.Append(" "); builder.Append(logEvent.FormattedMessage); @@ -47,14 +35,38 @@ protected override void Append(StringBuilder builder, LogEventInfo logEvent) } } - static string ConvertEventId(int eventId) + private static void AppendEventId(int eventId, StringBuilder builder) { if (eventId == 0) - return "0"; - else if (eventId > 0 || eventId < EventIdMapper.Length) - return EventIdMapper[eventId]; + builder.Append('0'); + else if (eventId > 0 && eventId < EventIdMapper.Length) + builder.Append(EventIdMapper[eventId]); else - return eventId.ToString(); + builder.Append(eventId); // .NET5 (and newer) can append integer without string-allocation (using span) + } + + private static int LookupEventId(LogEventInfo logEvent) + { + if (logEvent.HasProperties) + { + if (logEvent.Properties.TryGetValue("EventId_Id", out var eventObject)) + { + if (eventObject is int eventId) + return eventId; + else if (eventObject is Microsoft.Extensions.Logging.EventId eventIdStruct) + return eventIdStruct.Id; + } + + if (logEvent.Properties.TryGetValue("EventId", out var eventid)) + { + if (eventObject is int eventId) + return eventId; + else if (eventObject is Microsoft.Extensions.Logging.EventId eventIdStruct) + return eventIdStruct.Id; + } + } + + return 0; } string ConvertLogLevel(LogLevel logLevel) diff --git a/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj b/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj index 83495060..6271396b 100644 --- a/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj +++ b/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj @@ -18,10 +18,9 @@ For ASP.NET Core, check: https://www.nuget.org/packages/NLog.Web.AspNetCore NLog;Microsoft.Extensions.Logging;log;logging;logfiles;netcore - -- NLogLogger - Skip custom message formatting when no parameters (#513) (@snakefoot) -- Disable ImplicitNuGetFallbackFolder for tests - fixes NU3005 on AppVeyor (#515) (@304NotModified) -- Bump NLog from 4.7.10 to 4.7.11 (#516) (@dependabot) +- MicrosoftConsoleLayoutRenderer - Fixed IndexOutOfRangeException when large EventID (#570) (@mickelsonmichael) +- MicrosoftConsoleLayoutRenderer - Skip string-allocation for EventId when possible on platform (#572) (@snakefoot) +- Bump NLog from 4.7.11 to 4.7.15 Full changelog: https://github.com/NLog/NLog.Extensions.Logging/blob/master/CHANGELOG.MD @@ -76,7 +75,7 @@ Full changelog: https://github.com/NLog/NLog.Extensions.Logging/blob/master/CHAN $(DefineConstants);NETSTANDARD - + diff --git a/test/NLog.Extensions.Logging.Tests/MicrosoftConsoleLayoutRendererTest.cs b/test/NLog.Extensions.Logging.Tests/MicrosoftConsoleLayoutRendererTest.cs index fa56e033..c0720e08 100644 --- a/test/NLog.Extensions.Logging.Tests/MicrosoftConsoleLayoutRendererTest.cs +++ b/test/NLog.Extensions.Logging.Tests/MicrosoftConsoleLayoutRendererTest.cs @@ -24,5 +24,15 @@ public void MicrosoftConsoleLayoutRenderer_ExceptionEvent() var result = layoutRenderer.Render(new LogEventInfo(LogLevel.Error, "MyLogger", null, "Alert {EventId_Id}", new object[] { eventId }, exception)); Assert.Equal($"fail: MyLogger[{eventId}]{Environment.NewLine} Alert 42{Environment.NewLine}{exception}", result); } + + [Fact] + public void MicrosoftConsoleLayoutRenderer_OutOfMapperBoundsEventId() + { + var layoutRenderer = new MicrosoftConsoleLayoutRenderer(); + var exception = new ArgumentException("Test"); + var eventId = 500; + var result = layoutRenderer.Render(new LogEventInfo(LogLevel.Error, "MyLogger", null, "Alert {EventId_Id}", new object[] { eventId }, exception)); + Assert.Equal($"fail: MyLogger[{eventId}]{Environment.NewLine} Alert 500{Environment.NewLine}{exception}", result); + } } } diff --git a/test/NLog.Extensions.Logging.Tests/NLogLoggingConfigurationTests.cs b/test/NLog.Extensions.Logging.Tests/NLogLoggingConfigurationTests.cs index c3319002..4efcfb68 100644 --- a/test/NLog.Extensions.Logging.Tests/NLogLoggingConfigurationTests.cs +++ b/test/NLog.Extensions.Logging.Tests/NLogLoggingConfigurationTests.cs @@ -273,6 +273,7 @@ private static NLogLoggingConfiguration CreateNLogLoggingConfigurationWithNLogSe private static Dictionary CreateMemoryConfigConsoleTargetAndRule(string sectionName = DefaultSectionName) { var memoryConfig = new Dictionary(); + memoryConfig[$"{sectionName}:throwConfigExceptions"] = "true"; memoryConfig[$"{sectionName}:Rules:0:logger"] = "*"; memoryConfig[$"{sectionName}:Rules:0:minLevel"] = "Trace"; memoryConfig[$"{sectionName}:Rules:0:writeTo"] = "File,Console";