/// <summary>  Adds the filtered logger to the ILoggingBuilder.</summary>
        /// <param name="builder">The builder.</param>
        /// <param name="config">  Use this to add the logging providers you want to filter.</param>
        /// <param name="filter">  A function that allows you to examine or transform the logger message before it's sent to a logger implementation.</param>
        /// <returns></returns>
        public static ILoggingBuilder AddFilteredLogger(this ILoggingBuilder builder,
                                                        Action <ILoggingBuilder> config,
                                                        FilteringLogger.FilterMessage filter)
        {
            // Collect the desired logging provider configurations
            var hostBuilder = new HostBuilder()
                              .ConfigureLogging(config);

            var host = hostBuilder.Build();

            // Find the logging providers from the dependency injection container.
            var providers = host.Services.GetServices <ILoggerProvider>();

            foreach (var provider in providers)
            {
                // Create a FilteredLoggerProvider wrapper for each
                // provider registered.
                var    genericType   = typeof(FilteringLoggerProvider <>);
                Type[] typeArgs      = { provider.GetType() };
                var    finalType     = genericType.MakeGenericType(typeArgs);
                var    finalProvider = (ILoggerProvider)Activator.CreateInstance(finalType, provider, filter);
                builder.Services.AddSingleton(finalProvider);
            }

            return(builder);
        }
 public FilteringLoggerProvider(ILoggerProvider providerToFilter, FilteringLogger.FilterMessage filter)
 {
     _providerToFilter = providerToFilter;
     _filter           = filter;
 }