@@ -35,23 +35,29 @@ public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId
3535 {
3636 throw new ArgumentNullException ( nameof ( formatter ) ) ;
3737 }
38- var message = formatter ( state , exception ) ;
3938
39+ var message = formatter ( state , exception ) ;
4040 var messageTemplate = _options . CaptureMessageTemplates ? state as IReadOnlyList < KeyValuePair < string , object > > : null ;
4141 LogEventInfo eventInfo = CreateLogEventInfo ( nLogLogLevel , message , messageTemplate ) ;
42- eventInfo . Exception = exception ;
42+ if ( exception != null )
43+ {
44+ eventInfo . Exception = exception ;
45+ }
4346
4447 CaptureEventId ( eventInfo , eventId ) ;
4548
46- CaptureMessageProperties ( eventInfo , state , messageTemplate ) ;
49+ if ( messageTemplate == null )
50+ {
51+ CaptureMessageProperties ( eventInfo , state ) ;
52+ }
4753
4854 _logger . Log ( eventInfo ) ;
4955 }
5056
5157
5258 private LogEventInfo CreateLogEventInfo ( LogLevel nLogLogLevel , string message , IReadOnlyList < KeyValuePair < string , object > > parameterList )
5359 {
54- if ( parameterList != null && parameterList . Count > 1 && IsNonDigitValue ( parameterList [ 0 ] . Key ) )
60+ if ( parameterList != null && parameterList . Count > 0 && IsNonDigitValue ( parameterList [ 0 ] . Key ) )
5561 {
5662 return CreateLogEventInfoWithMultipleParameters ( nLogLogLevel , message , parameterList ) ;
5763 }
@@ -68,30 +74,24 @@ private static bool IsNonDigitValue(string value)
6874 /// </summary>
6975 private LogEventInfo CreateLogEventInfoWithMultipleParameters ( LogLevel nLogLogLevel , string message , IReadOnlyList < KeyValuePair < string , object > > parameterList )
7076 {
71- var originalFormat = parameterList [ parameterList . Count - 1 ] ;
72- string originalMessage = null ;
73- if ( originalFormat . Key == OriginalFormatPropertyName )
74- {
75- // Attempt to capture original message with placeholders
76- originalMessage = originalFormat . Value as string ;
77- }
78-
79- var messageTemplateParameters = new NLogMessageParameterList ( parameterList , originalMessage != null ) ;
80- var eventInfo = new LogEventInfo ( nLogLogLevel , _logger . Name , originalMessage ?? message , messageTemplateParameters ) ;
77+ var messageTemplateParameters = new NLogMessageParameterList ( parameterList ) ;
78+ var originalMessage = messageTemplateParameters . OriginalMessage as string ;
79+ var logEvent = new LogEventInfo ( nLogLogLevel , _logger . Name , originalMessage ?? message , messageTemplateParameters ) ;
8180 if ( originalMessage != null )
8281 {
83- SetEventInfoParameters ( eventInfo , messageTemplateParameters ) ;
84- eventInfo . Parameters [ messageTemplateParameters . Count ] = message ;
85- eventInfo . MessageFormatter = ( l ) => ( string ) l . Parameters [ l . Parameters . Length - 1 ] ;
82+ SetLogEventMessageFormatter ( logEvent , messageTemplateParameters , message ) ;
8683 }
87- return eventInfo ;
84+ return logEvent ;
8885 }
8986
90- private static void SetEventInfoParameters ( LogEventInfo eventInfo , NLogMessageParameterList messageTemplateParameters )
87+ private static void SetLogEventMessageFormatter ( LogEventInfo logEvent , NLogMessageParameterList messageTemplateParameters , string formattedMessage )
9188 {
92- eventInfo . Parameters = new object [ messageTemplateParameters . Count + 1 ] ;
93- for ( int i = 0 ; i < messageTemplateParameters . Count ; ++ i )
94- eventInfo . Parameters [ i ] = messageTemplateParameters [ i ] . Value ;
89+ var parameters = new object [ messageTemplateParameters . Count + 1 ] ;
90+ for ( int i = 0 ; i < parameters . Length - 1 ; ++ i )
91+ parameters [ i ] = messageTemplateParameters [ i ] . Value ;
92+ parameters [ parameters . Length - 1 ] = formattedMessage ;
93+ logEvent . Parameters = parameters ;
94+ logEvent . MessageFormatter = ( l ) => ( string ) l . Parameters [ l . Parameters . Length - 1 ] ;
9595 }
9696
9797 private void CaptureEventId ( LogEventInfo eventInfo , EventId eventId )
@@ -123,9 +123,9 @@ private static Tuple<string, string, string> CreateEventIdPropertyNames(string e
123123 return eventIdPropertyNames ;
124124 }
125125
126- private void CaptureMessageProperties < TState > ( LogEventInfo eventInfo , TState state , IReadOnlyList < KeyValuePair < string , object > > messageTemplate )
126+ private void CaptureMessageProperties < TState > ( LogEventInfo eventInfo , TState state )
127127 {
128- if ( _options . CaptureMessageProperties && messageTemplate == null && state is IEnumerable < KeyValuePair < string , object > > messageProperties )
128+ if ( _options . CaptureMessageProperties && state is IEnumerable < KeyValuePair < string , object > > messageProperties )
129129 {
130130 foreach ( var property in messageProperties )
131131 {
@@ -273,15 +273,5 @@ public IDisposable BeginScope<TState>(TState state)
273273
274274 return NestedDiagnosticsLogicalContext . Push ( state ) ;
275275 }
276-
277- internal static string RemoveMarkerFromName ( string parameterName )
278- {
279- var firstChar = parameterName [ 0 ] ;
280- if ( firstChar == '@' || firstChar == '$' )
281- {
282- parameterName = parameterName . Substring ( 1 ) ;
283- }
284- return parameterName ;
285- }
286276 }
287277}
0 commit comments