//4
 public static BackgroundLogger BackgroundLogger(
     this LoggingWizardCharms charms,
     Func <LoggingWizardCharms, ILogger[]> loggerFactories,
     LogLevel minLevel       = LogLevel.Debug,
     TimeSpan?flushPeriod    = null,
     int?batchSize           = null,
     bool leaveOpen          = false,
     ILogger emergencyLogger = null
     )
 {
     return(BackgroundLogger(
                charms,
                charms.CompositeLogger(loggerFactories(charms)),
                new MinimumLogLevelVerifier(minLevel),
                flushPeriod,
                batchSize,
                leaveOpen,
                emergencyLogger
                ));
 }
 //3
 public static BackgroundLogger BackgroundLogger(
     this LoggingWizardCharms charms,
     Func <LoggingWizardCharms, ILogger[]> loggerFactories,
     ILogRecordVerifier recordVerifier,
     TimeSpan?flushPeriod    = null,
     int?batchSize           = null,
     bool leaveOpen          = false,
     ILogger emergencyLogger = null
     )
 {
     return(BackgroundLogger(
                charms,
                charms.CompositeLogger(loggerFactories(charms)),
                recordVerifier,
                flushPeriod,
                batchSize,
                leaveOpen,
                emergencyLogger
                ));
 }