title: duplicate output in simple python logging configuration
body: <p>I'm setting up python logging as follows:</p>
  
  <pre><code>def setup_logging():
      loggers = (logging.getLogger("amcat"), logging.getLogger("scrapers"),logging.getLogger(__name__))
      filename = "somefile.txt"
      sys.stderr = open(filename, 'a')
      handlers = (logging.StreamHandler(sys.stdout),logging.FileHandler(filename))
      formatter = AmcatFormatter(date = True)
  
      for handler in handlers:
          handler.setLevel(logging.INFO)
          handler.setFormatter(formatter)
  
      for logger in loggers:
          logger.propagate = False
          logger.setLevel(logging.INFO)
          for handler in handlers:        
              logger.addHandler(handler)
      logging.getLogger().handlers = []
  </code></pre>
  
  <p>2 major module loggers are enabled, they're both supposed to log to the console aswell as a file. errors are redirected to the file (ideally, errors would show in the console as well but i've yet to implement this)</p>
  
  <p>Right after, i check whether things are right:</p>
  
  <pre><code>should_work = [
      "amcat.scraping.scraper",
      "amcat.scraping.htmltools",
      "amcat.scraping.controller",
      "__main__"]
  
  loggerdict = logging.Logger.manager.loggerDict #all loggers
  for name, logger in loggerdict.items():
      if name in should_work:
          print("\nlogger: "+name)
          #iterate through parents see if effective handlers are set correctly
          print(effectivehandlers(logger))
          #test logger
          logger.info("test for {name}".format(**locals()))
  
  def effectivehandlers(logger):
      handlers = logger.handlers
      while True:
          logger = logger.parent
          handlers.extend(logger.handlers)
          if not (logger.parent and logger.propagate):
              break
      return handlers
  </code></pre>
  
  <p>The console output:</p>
  
  <pre><code>logger: __main__
  [&lt;logging.StreamHandler object at 0x3425d50&gt;, &lt;logging.FileHandler object at 0x3425dd0&gt;]
  [2013-10-24 10:27:30 daily.py:133 INFO] test for __main__
  
  logger: amcat.scraping.controller
  [&lt;logging.StreamHandler object at 0x3425d50&gt;, &lt;logging.FileHandler object at 0x3425dd0&gt;]
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.controller
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.controller
  
  logger: amcat.scraping.htmltools
  [&lt;logging.StreamHandler object at 0x3425d50&gt;, &lt;logging.FileHandler object at 0x3425dd0&gt;]
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.htmltools
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.htmltools
  
  logger: amcat.scraping.scraper
  [&lt;logging.StreamHandler object at 0x3425d50&gt;, &lt;logging.FileHandler object at 0x3425dd0&gt;]
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.scraper
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.scraper
  </code></pre>
  
  <p>And here's the file output:</p>
  
  <pre><code>[2013-10-24 10:27:30 daily.py:133 INFO] test for __main__
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.controller
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.controller
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.htmltools
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.htmltools
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.scraper
  [2013-10-24 10:27:30 daily.py:133 INFO] test for amcat.scraping.scraper
  </code></pre>
  
  <p>As you can see, the output is double, despite having disabled propagation and making sure no duplicate handlers are present. Where does this go wrong?</p>