code: private static void bindLogger(InjectorImpl injector) {
      Key<Logger> key = Key.get(Logger.class);
      LoggerFactory loggerFactory = new LoggerFactory();
      injector.state.putBinding(
          key,
          new ProviderInstanceBindingImpl<Logger>(
              injector,
              key,
              SourceProvider.UNKNOWN_SOURCE,
              loggerFactory,
              Scoping.UNSCOPED,
              loggerFactory,
              ImmutableSet.<InjectionPoint>of()));
  
      try {
        Key<org.slf4j.Logger> slf4jKey = Key.get(org.slf4j.Logger.class);
        SLF4JLoggerFactory slf4jLoggerFactory = new SLF4JLoggerFactory(injector);
        injector.state.putBinding(slf4jKey,
            new ProviderInstanceBindingImpl<org.slf4j.Logger>(injector, slf4jKey,
                SourceProvider.UNKNOWN_SOURCE, slf4jLoggerFactory, Scoping.UNSCOPED,
                slf4jLoggerFactory, ImmutableSet.<InjectionPoint>of()));
      } catch (Throwable e) {}
    }
docs: The Logger is a special case because it knows the injection point of the injected member. It's
  the only binding that does this.