4
4
using System ;
5
5
using System . Collections ;
6
6
using System . Collections . Generic ;
7
+ using Microsoft . Extensions . Logging . Abstractions ;
7
8
using Microsoft . Extensions . Logging . Internal ;
8
9
9
10
namespace Microsoft . Extensions . Logging
@@ -20,7 +21,9 @@ public static class LoggerMessage
20
21
/// <returns>A delegate which when invoked creates a log scope.</returns>
21
22
public static Func < ILogger , IDisposable > DefineScope ( string formatString )
22
23
{
23
- var logValues = new LogValues ( new LogValuesFormatter ( formatString ) ) ;
24
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 0 ) ;
25
+
26
+ var logValues = new LogValues ( formatter ) ;
24
27
25
28
return logger => logger . BeginScope ( logValues ) ;
26
29
}
@@ -33,7 +36,7 @@ public static Func<ILogger, IDisposable> DefineScope(string formatString)
33
36
/// <returns>A delegate which when invoked creates a log scope.</returns>
34
37
public static Func < ILogger , T1 , IDisposable > DefineScope < T1 > ( string formatString )
35
38
{
36
- var formatter = new LogValuesFormatter ( formatString ) ;
39
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 1 ) ;
37
40
38
41
return ( logger , arg1 ) => logger . BeginScope ( new LogValues < T1 > ( formatter , arg1 ) ) ;
39
42
}
@@ -47,7 +50,7 @@ public static Func<ILogger, T1, IDisposable> DefineScope<T1>(string formatString
47
50
/// <returns>A delegate which when invoked creates a log scope.</returns>
48
51
public static Func < ILogger , T1 , T2 , IDisposable > DefineScope < T1 , T2 > ( string formatString )
49
52
{
50
- var formatter = new LogValuesFormatter ( formatString ) ;
53
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 2 ) ;
51
54
52
55
return ( logger , arg1 , arg2 ) => logger . BeginScope ( new LogValues < T1 , T2 > ( formatter , arg1 , arg2 ) ) ;
53
56
}
@@ -62,7 +65,7 @@ public static Func<ILogger, T1, T2, IDisposable> DefineScope<T1, T2>(string form
62
65
/// <returns>A delegate which when invoked creates a log scope.</returns>
63
66
public static Func < ILogger , T1 , T2 , T3 , IDisposable > DefineScope < T1 , T2 , T3 > ( string formatString )
64
67
{
65
- var formatter = new LogValuesFormatter ( formatString ) ;
68
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 3 ) ;
66
69
67
70
return ( logger , arg1 , arg2 , arg3 ) => logger . BeginScope ( new LogValues < T1 , T2 , T3 > ( formatter , arg1 , arg2 , arg3 ) ) ;
68
71
}
@@ -76,7 +79,7 @@ public static Func<ILogger, T1, T2, T3, IDisposable> DefineScope<T1, T2, T3>(str
76
79
/// <returns>A delegate which when invoked creates a log message.</returns>
77
80
public static Action < ILogger , Exception > Define ( LogLevel logLevel , EventId eventId , string formatString )
78
81
{
79
- var formatter = new LogValuesFormatter ( formatString ) ;
82
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 0 ) ;
80
83
81
84
return ( logger , exception ) =>
82
85
{
@@ -97,7 +100,7 @@ public static Action<ILogger, Exception> Define(LogLevel logLevel, EventId event
97
100
/// <returns>A delegate which when invoked creates a log message.</returns>
98
101
public static Action < ILogger , T1 , Exception > Define < T1 > ( LogLevel logLevel , EventId eventId , string formatString )
99
102
{
100
- var formatter = new LogValuesFormatter ( formatString ) ;
103
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 1 ) ;
101
104
102
105
return ( logger , arg1 , exception ) =>
103
106
{
@@ -119,7 +122,7 @@ public static Action<ILogger, T1, Exception> Define<T1>(LogLevel logLevel, Event
119
122
/// <returns>A delegate which when invoked creates a log message.</returns>
120
123
public static Action < ILogger , T1 , T2 , Exception > Define < T1 , T2 > ( LogLevel logLevel , EventId eventId , string formatString )
121
124
{
122
- var formatter = new LogValuesFormatter ( formatString ) ;
125
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 2 ) ;
123
126
124
127
return ( logger , arg1 , arg2 , exception ) =>
125
128
{
@@ -142,7 +145,7 @@ public static Action<ILogger, T1, T2, Exception> Define<T1, T2>(LogLevel logLeve
142
145
/// <returns>A delegate which when invoked creates a log message.</returns>
143
146
public static Action < ILogger , T1 , T2 , T3 , Exception > Define < T1 , T2 , T3 > ( LogLevel logLevel , EventId eventId , string formatString )
144
147
{
145
- var formatter = new LogValuesFormatter ( formatString ) ;
148
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 3 ) ;
146
149
147
150
return ( logger , arg1 , arg2 , arg3 , exception ) =>
148
151
{
@@ -166,7 +169,7 @@ public static Action<ILogger, T1, T2, T3, Exception> Define<T1, T2, T3>(LogLevel
166
169
/// <returns>A delegate which when invoked creates a log message.</returns>
167
170
public static Action < ILogger , T1 , T2 , T3 , T4 , Exception > Define < T1 , T2 , T3 , T4 > ( LogLevel logLevel , EventId eventId , string formatString )
168
171
{
169
- var formatter = new LogValuesFormatter ( formatString ) ;
172
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 4 ) ;
170
173
171
174
return ( logger , arg1 , arg2 , arg3 , arg4 , exception ) =>
172
175
{
@@ -191,7 +194,7 @@ public static Action<ILogger, T1, T2, T3, T4, Exception> Define<T1, T2, T3, T4>(
191
194
/// <returns>A delegate which when invoked creates a log message.</returns>
192
195
public static Action < ILogger , T1 , T2 , T3 , T4 , T5 , Exception > Define < T1 , T2 , T3 , T4 , T5 > ( LogLevel logLevel , EventId eventId , string formatString )
193
196
{
194
- var formatter = new LogValuesFormatter ( formatString ) ;
197
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 5 ) ;
195
198
196
199
return ( logger , arg1 , arg2 , arg3 , arg4 , arg5 , exception ) =>
197
200
{
@@ -217,7 +220,7 @@ public static Action<ILogger, T1, T2, T3, T4, T5, Exception> Define<T1, T2, T3,
217
220
/// <returns>A delegate which when invoked creates a log message.</returns>
218
221
public static Action < ILogger , T1 , T2 , T3 , T4 , T5 , T6 , Exception > Define < T1 , T2 , T3 , T4 , T5 , T6 > ( LogLevel logLevel , EventId eventId , string formatString )
219
222
{
220
- var formatter = new LogValuesFormatter ( formatString ) ;
223
+ var formatter = CreateLogValuesFormatter ( formatString , expectedNamedParameterCount : 6 ) ;
221
224
222
225
return ( logger , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , exception ) =>
223
226
{
@@ -228,6 +231,20 @@ public static Action<ILogger, T1, T2, T3, T4, T5, T6, Exception> Define<T1, T2,
228
231
} ;
229
232
}
230
233
234
+ private static LogValuesFormatter CreateLogValuesFormatter ( string formatString , int expectedNamedParameterCount )
235
+ {
236
+ var logValuesFormatter = new LogValuesFormatter ( formatString ) ;
237
+
238
+ var actualCount = logValuesFormatter . ValueNames . Count ;
239
+ if ( actualCount != expectedNamedParameterCount )
240
+ {
241
+ throw new ArgumentException (
242
+ Resource . FormatUnexpectedNumberOfNamedParameters ( formatString , expectedNamedParameterCount , actualCount ) ) ;
243
+ }
244
+
245
+ return logValuesFormatter ;
246
+ }
247
+
231
248
private class LogValues : IReadOnlyList < KeyValuePair < string , object > >
232
249
{
233
250
public static Func < object , Exception , string > Callback = ( state , exception ) => ( ( LogValues ) state ) . _formatter . Format ( ( ( LogValues ) state ) . ToArray ( ) ) ;
0 commit comments