@@ -128,6 +128,136 @@ public void UseNLog_LoadConfigurationFromSection()
128
128
129
129
Assert . Single ( logged ) ;
130
130
Assert . Equal ( "logger1|error1|Memory" , logged [ 0 ] ) ;
131
+ //Reset
132
+ LogManager . Configuration = null ;
131
133
}
134
+
135
+ #if NET8_0_OR_GREATER
136
+ [ Fact ]
137
+ public void IHostApplicationBuilder_UseNLog_ArgumentNullException ( )
138
+ {
139
+ IHostApplicationBuilder hostBuilder = null ;
140
+ var argNulLException = Assert . Throws < ArgumentNullException > ( ( ) => hostBuilder . UseNLog ( ) ) ;
141
+ Assert . Equal ( "builder" , argNulLException . ParamName ) ;
142
+ }
143
+
144
+ [ Fact ]
145
+ public void IHostApplicationBuilder_UseNLog_noParams_WorksWithNLog ( )
146
+ {
147
+ var builder = new HostApplicationBuilder ( ) ;
148
+ builder . UseNLog ( ) ;
149
+
150
+ var actual = builder . Build ( ) ;
151
+ TestHostingResult ( actual , true ) ;
152
+ }
153
+
154
+ [ Fact ]
155
+ public void IHostApplicationBuilder_UseNLog_withOptionsParam_WorksWithNLog ( )
156
+ {
157
+ var someParam = new NLogProviderOptions { CaptureMessageProperties = false , CaptureMessageTemplates = false } ;
158
+
159
+ var builder = new HostApplicationBuilder ( ) ;
160
+ builder . UseNLog ( someParam ) ;
161
+
162
+ var actual = builder . Build ( ) ;
163
+ TestHostingResult ( actual , true ) ;
164
+ }
165
+
166
+ [ Fact ]
167
+ public void IHostApplicationBuilder_UseNLog_withConfiguration_WorksWithNLog ( )
168
+ {
169
+ var memoryConfig = new Dictionary < string , string > ( ) ;
170
+ memoryConfig [ "NLog:CaptureMessageProperties" ] = "true" ;
171
+ memoryConfig [ "NLog:CaptureMessageTemplates" ] = "false" ;
172
+ memoryConfig [ "NLog:IgnoreScopes" ] = "false" ;
173
+
174
+ var someParam = new NLogProviderOptions { CaptureMessageProperties = false , CaptureMessageTemplates = false } ;
175
+
176
+ var builder = new HostApplicationBuilder ( ) ;
177
+ builder . Configuration . AddInMemoryCollection ( memoryConfig ) ;
178
+ builder . UseNLog ( someParam ) ;
179
+
180
+ var actual = builder . Build ( ) ;
181
+ TestHostingResult ( actual , true ) ;
182
+ }
183
+
184
+ [ Fact ]
185
+ public void IHostApplicationBuilder_AddNLog_withShutdownOnDispose_worksWithNLog ( )
186
+ {
187
+ var someParam = new NLogProviderOptions { ShutdownOnDispose = true } ;
188
+
189
+ var builder = new HostApplicationBuilder ( ) ;
190
+ builder . Logging . AddNLog ( someParam ) ;
191
+
192
+ var actual = builder . Build ( ) ;
193
+ try
194
+ {
195
+ TestHostingResult ( actual , false ) ;
196
+ Assert . NotNull ( LogManager . Configuration ) ;
197
+ }
198
+ finally
199
+ {
200
+ actual . Dispose ( ) ;
201
+ Assert . Null ( LogManager . Configuration ) ;
202
+ }
203
+ }
204
+
205
+ [ Fact ]
206
+ public void IHostApplicationBuilder_UseNLog_withAddNLog_worksWithNLog ( )
207
+ {
208
+ var builder = new HostApplicationBuilder ( ) ;
209
+ builder . UseNLog ( ) ;
210
+ builder . Logging . AddNLog ( ) ;
211
+
212
+ var actual = builder . Build ( ) ;
213
+ TestHostingResult ( actual , true ) ;
214
+ }
215
+
216
+ [ Fact ]
217
+ public void IHostApplicationBuilder_UseNLog_ReplaceLoggerFactory ( )
218
+ {
219
+ var builder = new HostApplicationBuilder ( ) ;
220
+ builder . Services . AddLogging ( ) ;
221
+ builder . UseNLog ( new NLogProviderOptions ( ) { ReplaceLoggerFactory = true , RemoveLoggerFactoryFilter = true } ) ;
222
+
223
+ var actual = builder . Build ( ) ;
224
+
225
+ var loggerFactory = actual . Services . GetService < ILoggerFactory > ( ) ;
226
+
227
+ Assert . Equal ( typeof ( NLogLoggerFactory ) , loggerFactory . GetType ( ) ) ;
228
+ }
229
+
230
+ [ Fact ]
231
+ public void IHostApplicationBuilder_UseNLog_LoadConfigurationFromSection ( )
232
+ {
233
+ var memoryConfig = new Dictionary < string , string > ( ) ;
234
+ memoryConfig [ "NLog:Rules:0:logger" ] = "*" ;
235
+ memoryConfig [ "NLog:Rules:0:minLevel" ] = "Trace" ;
236
+ memoryConfig [ "NLog:Rules:0:writeTo" ] = "inMemory" ;
237
+ memoryConfig [ "NLog:Targets:inMemory:type" ] = "Memory" ;
238
+ memoryConfig [ "NLog:Targets:inMemory:layout" ] = "${logger}|${message}|${configsetting:NLog.Targets.inMemory.type}" ;
239
+
240
+ var builder = new HostApplicationBuilder ( ) ;
241
+ builder . Configuration . AddInMemoryCollection ( memoryConfig ) ;
242
+ builder . UseNLog ( new NLogProviderOptions ( ) { LoggingConfigurationSectionName = "NLog" , ReplaceLoggerFactory = true } ) ;
243
+
244
+ var host = builder . Build ( ) ;
245
+
246
+ var loggerFact = host . Services . GetService < ILoggerFactory > ( ) ;
247
+ var logger = loggerFact . CreateLogger ( "logger1" ) ;
248
+
249
+ ConfigSettingLayoutRenderer . DefaultConfiguration = null ; // See dependency resolving is working
250
+
251
+ logger . LogError ( "error1" ) ;
252
+
253
+ var loggerProvider = host . Services . GetService < ILoggerProvider > ( ) as NLogLoggerProvider ;
254
+ var logged = loggerProvider . LogFactory . Configuration . FindTargetByName < Targets . MemoryTarget > ( "inMemory" ) . Logs ;
255
+
256
+ Assert . Single ( logged ) ;
257
+ Assert . Equal ( "logger1|error1|Memory" , logged [ 0 ] ) ;
258
+ //Reset
259
+ LogManager . Configuration = null ;
260
+ }
261
+ #endif
132
262
}
133
263
}
0 commit comments