@@ -128,6 +128,136 @@ public void UseNLog_LoadConfigurationFromSection()
128128
129129 Assert . Single ( logged ) ;
130130 Assert . Equal ( "logger1|error1|Memory" , logged [ 0 ] ) ;
131+ //Reset
132+ LogManager . Configuration = null ;
131133 }
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
132262 }
133263}
0 commit comments