Logging: how to suppress default output when adding handlers?

Chris Shenton chris at shenton.org
Tue Jun 5 09:44:07 EDT 2007


I am setting up handlers to log DEBUG and above to a rotating file and
ERROR and above to console.  But if any of my code calls a logger
(e.g., logging.error("foo")) before I setup my handlers, the logging
system will create a default logger that *also* emits logs, which I
can't seem to get rid of.  Is there a way I can suppress the creation
of this default logger, or remove it when I 'm setting up my handlers?
Thanks.

Sample code:

  import sys, logging, logging.handlers

  if len(sys.argv) > 1:
      logging.warning("Logging before setting handlers adds unwanted default logger")

  logging.getLogger().setLevel(logging.DEBUG)

  console = logging.StreamHandler()
  console.setLevel(logging.ERROR)
  console.setFormatter(logging.Formatter('%(levelname)-8s %(module)s: %(message)s'))
  logging.getLogger().addHandler(console)

  filelog = logging.handlers.RotatingFileHandler("/tmp/logtest2.log")
  filelog.setFormatter(logging.Formatter('%(asctime)s %(levelname)-8s %(module)s: %(message)s'))
  filelog.setLevel(logging.DEBUG)      # NOP since default above is DEBUG, but OK
  logging.getLogger().addHandler(filelog)

  logging.debug("TEST debug")
  logging.warning("TEST warning")
  logging.error("TEST error")


Sample runs, first without initial log call (good), then with one
showing the default log messages in the mix (bad); I'm showing the
console and tailing the logfile so they're mixed together but the
timestamp indicates the file logs:

  chris at Bacalao:/tmp<103> tail -f /tmp/logtest2.log &

  chris at Bacalao:/tmp<118> python /tmp/logtest2.py 
  2007-06-05 09:36:27,234 DEBUG    logtest2: TEST debug
  2007-06-05 09:36:27,234 WARNING  logtest2: TEST warning
  ERROR    logtest2: TEST error
  2007-06-05 09:36:27,239 ERROR    logtest2: TEST error

  chris at Bacalao:/tmp<119> python /tmp/logtest2.py  this gives ugly logger
  WARNING:root:Logging before setting handlers adds unwanted default logger
  DEBUG:root:TEST debug
  2007-06-05 09:36:30,069 DEBUG    logtest2: TEST debug
  WARNING:root:TEST warning
  2007-06-05 09:36:30,072 WARNING  logtest2: TEST warning
  ERROR:root:TEST error
  ERROR    logtest2: TEST error
  2007-06-05 09:36:30,073 ERROR    logtest2: TEST error



More information about the Python-list mailing list