@@ -45,6 +45,32 @@ public static IHostBuilder UseNLog(this IHostBuilder builder, NLogProviderOption
4545 return builder ;
4646 }
4747
48+ /// <summary>
49+ /// Enable NLog as logging provider for Microsoft Extension Logging
50+ /// </summary>
51+ /// <param name="builder"></param>
52+ /// <param name="options">NLogProviderOptions object to configure NLog behavior</param>
53+ /// <param name="factoryBuilder">Initialize NLog LogFactory with NLog LoggingConfiguration.</param>
54+ /// <returns>IHostBuilder for chaining</returns>
55+ public static IHostBuilder UseNLog ( this IHostBuilder builder , NLogProviderOptions options , Func < IServiceProvider , LogFactory > factoryBuilder )
56+ {
57+ Guard . ThrowIfNull ( builder ) ;
58+ #if NETSTANDARD2_0
59+ builder . ConfigureServices ( ( builderContext , services ) => AddNLogLoggerProvider ( services , builderContext . Configuration , null , options , ( serviceProvider , config , hostEnv , opt ) =>
60+ #else
61+ builder . ConfigureServices ( ( builderContext , services ) => AddNLogLoggerProvider ( services , builderContext . Configuration , builderContext . HostingEnvironment , options , ( serviceProvider , config , hostEnv , opt ) =>
62+ #endif
63+ {
64+ config = serviceProvider . SetupNLogConfigSettings ( config , LogManager . LogFactory ) ;
65+
66+ // Delay initialization of targets until we have loaded config-settings
67+ var logFactory = factoryBuilder ( serviceProvider ) ;
68+ var provider = CreateNLogLoggerProvider ( serviceProvider , config , hostEnv , opt , logFactory ) ;
69+ return provider ;
70+ } ) ) ;
71+ return builder;
72+ }
73+
4874#if NET8_0_OR_GREATER
4975 /// <summary>
5076 /// Enable NLog as logging provider for Microsoft Extension Logging
@@ -66,7 +92,29 @@ public static IHostApplicationBuilder UseNLog(this IHostApplicationBuilder build
6692 public static IHostApplicationBuilder UseNLog ( this IHostApplicationBuilder builder , NLogProviderOptions options )
6793 {
6894 Guard . ThrowIfNull ( builder ) ;
69- builder . Services . TryAddNLogLoggingProvider ( ( svc , addlogging ) => svc . AddLogging ( addlogging ) , builder . Configuration , options , ( provider , cfg , opt ) => CreateNLogLoggerProvider ( provider , cfg , builder . Environment , opt ) ) ;
95+ builder. Services . TryAddNLogLoggingProvider ( ( svc , addlogging ) => svc . AddLogging ( addlogging ) , builder . Configuration , options , ( serviceProvider , config , opt ) => CreateNLogLoggerProvider ( serviceProvider , config , builder . Environment , opt ) ) ;
96+ return builder;
97+ }
98+
99+ /// <summary>
100+ /// Enable NLog as logging provider for Microsoft Extension Logging
101+ /// </summary>
102+ /// <param name="builder"></param>
103+ /// <param name="options">NLogProviderOptions object to configure NLog behavior</param>
104+ /// <param name="factoryBuilder">Initialize NLog LogFactory with NLog LoggingConfiguration.</param>
105+ /// <returns>IHostApplicationBuilder for chaining</returns>
106+ public static IHostApplicationBuilder UseNLog ( this IHostApplicationBuilder builder , NLogProviderOptions options , Func < IServiceProvider , LogFactory > factoryBuilder )
107+ {
108+ Guard . ThrowIfNull ( builder ) ;
109+ builder. Services . TryAddNLogLoggingProvider ( ( svc , addlogging ) => svc . AddLogging ( addlogging ) , builder . Configuration , options , ( serviceProvider , config , opt ) =>
110+ {
111+ config = serviceProvider . SetupNLogConfigSettings ( config , LogManager . LogFactory ) ;
112+
113+ // Delay initialization of targets until we have loaded config-settings
114+ var logFactory = factoryBuilder ( serviceProvider ) ;
115+ var provider = CreateNLogLoggerProvider ( serviceProvider , config , builder . Environment , opt , logFactory ) ;
116+ return provider ;
117+ } ) ;
70118 return builder;
71119 }
72120#endif
@@ -78,7 +126,12 @@ private static void AddNLogLoggerProvider(IServiceCollection services, IConfigur
78126
79127 private static NLogLoggerProvider CreateNLogLoggerProvider( IServiceProvider serviceProvider , IConfiguration hostConfiguration , IHostEnvironment hostEnvironment , NLogProviderOptions options )
80128 {
81- NLogLoggerProvider provider = serviceProvider . CreateNLogLoggerProvider ( hostConfiguration , options , null ) ;
129+ return serviceProvider. CreateNLogLoggerProvider ( hostConfiguration , options , LogManager . LogFactory ) ;
130+ }
131+
132+ private static NLogLoggerProvider CreateNLogLoggerProvider( IServiceProvider serviceProvider , IConfiguration hostConfiguration , IHostEnvironment hostEnvironment , NLogProviderOptions options , LogFactory logFactory )
133+ {
134+ NLogLoggerProvider provider = serviceProvider. CreateNLogLoggerProvider ( hostConfiguration , options , logFactory ) ;
82135
83136 string nlogConfigFile = string . Empty ;
84137 string contentRootPath = hostEnvironment ? . ContentRootPath ;
0 commit comments