Constructor
@class
@classdesc
Generic node provider implementation.

@param {Object} [options]               - Options for the instance.
@param {Object} [options.clOptions]     - Command line options if called from a script.
@param {Object} [options.logger]        - Logger to use. Or, pass loggerOptions to get your own logger.
@param {Object} [options.loggerOptions] - Options for the logger.
See {@link module:logger.getLogger} for details.
function GenericNodeProvider(options) {
    GenericNodeProvider.super_.call(this, options);

    this.loggerOptions = options ? options.loggerOptions : undefined;

    logger = options ? options.logger : undefined;

    if (logger) {
        this.logger = logger;
        cloudUtil.setLogger(logger);
        cryptoUtil.setLogger(logger);
    } else if (this.loggerOptions) {
        this.loggerOptions.module = module;
        logger = Logger.getLogger(this.loggerOptions);
        cloudUtil.setLoggerOptions(this.loggerOptions);
        cryptoUtil.setLoggerOptions(this.loggerOptions);
        this.logger = logger;
    } else {
        // use super's logger
        logger = this.logger;
        cloudUtil.setLogger(logger);
        cryptoUtil.setLogger(logger);
    }
}