code: function (appender, opts) {
              var args = argsToArray(arguments);
              if (isString(appender)) {
                  this.addAppender(Appender.createAppender(appender, opts));
              } else {
                  if (!isUndefinedOrNull(appender)) {
  
                      var name = appender.name;
                      if (!(name in this.__appenders)) {
                          this.__appenders[name] = appender;
                          if (!appender.level) {
                              appender.level = this.level;
                          }
                          this._tree.addAppender(appender);
                      }
                  }
              }
              return this;
          }
docs: Add an appender to this logger. If this is additive then the appender is added to all subloggers.
  
  @example
  comb.logger("my.logger")
  .addAppender("ConsoleAppender")
  .addAppender("FileAppender", {file:'/var/log/my.log'})
  .addAppender("RollingFileAppender", {file:'/var/log/myRolling.log'})
  .addAppender("JSONAppender", {file:'/var/log/myJson.log'});
  
  @param {comb.logging.Appender|String} If the appender is an {@link comb.logging.appenders.Appender} then it is added.
  If the appender is a string then {@link comb.logging.appenders.Appender.createAppender} will be called to create it.
  
  @param {Object} [opts = null] If the first argument is a string then the opts will be used as constructor arguments for
  creating the appender.
  
  @return {comb.logging.Logger} for chaining.