docs: function generateLoggingMethod(method, level, fallback) {
        return function() {
          if (on.shouldLog(level)) {
            var cons = window.console,
                args = makeLogArgumentsSafe(arguments);
  
            // In IE, window.console may not exist if the developer tools aren't open
            // This also means that cons and cons[method] can appear at any moment
            // hence why we retest this every time.
            if (cons && cons[method]) {
              // the desired console method isn't a real object, which means
              // that we can't use apply on it. We force it to be a real object
              // using Function.bind, assuming that's available.
              if (cons[method].apply || _canApplyConsole) {
                if (!cons[method].apply) {
                  cons[method] = Function.prototype.bind.call(cons[method], cons);
                }
  
                cons[method].apply(cons, args);
              }
              else {
                // This isn't the same result as the above, but it's better
                // than nothing.
                cons[method](args);
              }
            }
            else if (fallback) {
              fallback.apply(on, args);
  
              // Skip appendToLogs, we delegate entirely to the fallback
              return;
            }
  
            appendToLogs(method, makeLogArgumentsSafe(arguments));
          }
        };
      }