docs: function configureLogging(target, settings, options, forceConfiguration) {
    // If forceConfiguration is false check if the given target already has logging functionality configured on it
    // and, if so, do nothing more and simply return the target as is (to prevent overriding an earlier configuration)
    if (!forceConfiguration && isLoggingConfigured(target)) {
      return target;
    }
  
    // Ensure that any underlying logger to be configured is a minimum viable logger
    //noinspection JSUnresolvedVariable
    const logger = settings && settings.underlyingLogger ? settings.underlyingLogger :
      options && options.underlyingLogger ? options.underlyingLogger : undefined;
    if (logger && !isMinimumViableLogger(logger)) {
      const errMsg = `FATAL - Cannot configure logging with a logger that is NOT a minimum viable logger - logger: ${stringify(logger)}`;
      console.error(errMsg);
      throw new Error(errMsg);
    }
  
    // Create clean copies of the given settings and options
    settings = toCleanSettingsOrOptions(settings);
    options = toCleanSettingsOrOptions(options);
  
    // Resolve the logging settings to use by merging the clean options (if any) into the clean settings (if any) without
    // replacing any existing clean settings
    const loggingSettings = settings ? (options ? merge(options, settings) : settings) : options;
  
    // Finalise the logging settings by using the default options to fill in any missing settings
    const defaultOptions = getDefaultLoggingOptions();
    const loggingSettingsWithDefaults = loggingSettings ?
      merge(defaultOptions, loggingSettings) : defaultOptions;
  
    // Configure logging with the finalised logging settings
    _configureLogging(target, loggingSettingsWithDefaults);
    return target;
  }