Skip to content

Commit 86f79be

Browse files
authored
Include original message template when capture without boxing (#794)
1 parent 42b190a commit 86f79be

File tree

2 files changed

+36
-27
lines changed

2 files changed

+36
-27
lines changed

src/NLog.Extensions.Logging/Logging/NLogLogger.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,17 @@ public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId
8787
if ("0".Equals(arg1.Name))
8888
return CreateLogEventWithoutParameters(nLogLogLevel, eventId, captureEventId, formattedMessage);
8989

90+
var originalMessage = ((IReadOnlyList<KeyValuePair<string, object?>>)state)[1].Value?.ToString() ?? formattedMessage;
91+
9092
if (captureEventId)
9193
{
9294
var eventIdParameterCount = GetEventIdMessageParameters(eventId, out var eventIdArg1, out var eventIdArg2);
93-
if (eventIdParameterCount == 0)
94-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage);
95-
else if (eventIdParameterCount == 1)
96-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, formattedMessage, [arg1, eventIdArg1]);
97-
else
98-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, formattedMessage, [arg1, eventIdArg1, eventIdArg2]);
95+
if (eventIdParameterCount == 1)
96+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, eventIdArg1]);
97+
else if (eventIdParameterCount != 0)
98+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, eventIdArg1, eventIdArg2]);
9999
}
100-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, [arg1]);
100+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1]);
101101
}
102102
}
103103
break;
@@ -113,17 +113,17 @@ public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId
113113
if ("0".Equals(arg1.Name) && "1".Equals(arg2.Name))
114114
return CreateLogEventWithoutParameters(nLogLogLevel, eventId, captureEventId, formattedMessage);
115115

116+
var originalMessage = ((IReadOnlyList<KeyValuePair<string, object?>>)state)[2].Value?.ToString() ?? formattedMessage;
117+
116118
if (captureEventId)
117119
{
118120
var eventIdParameterCount = GetEventIdMessageParameters(eventId, out var eventIdArg1, out var eventIdArg2);
119-
if (eventIdParameterCount == 0)
120-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage);
121-
else if (eventIdParameterCount == 1)
122-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, formattedMessage, [arg1, arg2, eventIdArg1]);
123-
else
124-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, formattedMessage, [arg1, arg2, eventIdArg1, eventIdArg2]);
121+
if (eventIdParameterCount == 1)
122+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, arg2, eventIdArg1]);
123+
else if (eventIdParameterCount != 0)
124+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, arg2, eventIdArg1, eventIdArg2]);
125125
}
126-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, [arg1, arg2]);
126+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, arg2]);
127127
}
128128
}
129129
break;
@@ -141,17 +141,17 @@ public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId
141141
if ("0".Equals(arg1.Name) && "1".Equals(arg2.Name) && "2".Equals(arg3.Name))
142142
return CreateLogEventWithoutParameters(nLogLogLevel, eventId, captureEventId, formattedMessage);
143143

144+
var originalMessage = ((IReadOnlyList<KeyValuePair<string, object?>>)state)[3].Value?.ToString() ?? formattedMessage;
145+
144146
if (captureEventId)
145147
{
146148
var eventIdParameterCount = GetEventIdMessageParameters(eventId, out var eventIdArg1, out var eventIdArg2);
147-
if (eventIdParameterCount == 0)
148-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage);
149-
else if (eventIdParameterCount == 1)
150-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, formattedMessage, [arg1, arg2, arg3, eventIdArg1]);
151-
else
152-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, formattedMessage, [arg1, arg2, arg3, eventIdArg1, eventIdArg2]);
149+
if (eventIdParameterCount == 1)
150+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, arg2, arg3, eventIdArg1]);
151+
else if (eventIdParameterCount != 0)
152+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, arg2, arg3, eventIdArg1, eventIdArg2]);
153153
}
154-
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, [arg1, arg2, arg3]);
154+
return new LogEventInfo(nLogLogLevel, _logger.Name, formattedMessage, originalMessage, [arg1, arg2, arg3]);
155155
}
156156
}
157157
break;

test/NLog.Extensions.Logging.Tests/LoggerTests.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,20 +350,29 @@ public void TestPositionalCaptureMessageParameters()
350350
Assert.Equal("S", messageParameters[1].Format);
351351
}
352352

353-
[Fact]
354-
public void TestParseMessageTemplates()
353+
[Theory]
354+
[InlineData(true)]
355+
[InlineData(false)]
356+
public void TestParseMessageTemplates(bool parseMessageTemplates)
355357
{
356358
LogEventInfo logEvent = null;
357359
var debugTarget = new MethodCallTarget("output", (l, args) => logEvent = l);
358-
var runner = GetRunner<Runner>(new NLogProviderOptions() { ParseMessageTemplates = true }, debugTarget);
360+
var runner = GetRunner<Runner>(new NLogProviderOptions() { ParseMessageTemplates = parseMessageTemplates }, debugTarget);
359361
var messageTemplate = "message with {ParameterCount} parameters";
360362
runner.Logger.LogDebug(messageTemplate, "1");
361363

362364
Assert.NotNull(logEvent);
363365
Assert.Equal(messageTemplate, logEvent.Message);
364-
Assert.NotNull(logEvent.Parameters);
365-
Assert.Single(logEvent.Parameters);
366-
Assert.Equal("1", logEvent.Parameters[0]);
366+
if (parseMessageTemplates)
367+
{
368+
Assert.NotNull(logEvent.Parameters);
369+
Assert.Single(logEvent.Parameters);
370+
Assert.Equal("1", logEvent.Parameters[0]);
371+
}
372+
else
373+
{
374+
Assert.Null(logEvent.Parameters);
375+
}
367376

368377
var messageParameters = logEvent.MessageTemplateParameters;
369378
Assert.False(messageParameters.IsPositional);

0 commit comments

Comments
 (0)