A new way to configure Python logging

Vinay Sajip vinay_sajip at yahoo.co.uk
Thu Oct 22 11:25:15 CEST 2009


If you use the logging package but don't like using the ConfigParser-based
configuration files which it currently supports, keep reading. I'm proposing to
provide a new way to configure logging, using a Python dictionary to hold
configuration information. It means that you can convert a text file such as

# logconf.yml: example logging configuration
formatters:
  brief:
    format: '%(levelname)-8s: %(name)-15s: %(message)s'
  precise:
    format: '%(asctime)s %(name)-15s %(levelname)-8s %(message)s'
handlers:
  console:
    class : logging.StreamHandler
    formatter : brief
    level : INFO
    stream : ext://sys.stdout
  file:
    class : logging.handlers.RotatingFileHandler
    formatter : precise
    filename : logconfig.log
    maxBytes : 1000000
    backupCount : 3
  email:
    class: logging.handlers.SMTPHandler
    mailhost: localhost
    fromaddr: my_app at domain.tld
    toaddrs:
      - support_team at domain.tld
      - dev_team at domain.tld
    subject: Houston, we have a problem.
loggers:
  foo:
    level : ERROR
    handlers: [email]
  bar.baz:
    level: WARNING
root:
  level     : DEBUG
  handlers  : [console, file]
# -- EOF --

into a working configuration for logging. The above text is in YAML format, and
can easily be read into a Python dict using PyYAML and the code

import yaml; config = yaml.load(open('logconf.yml', 'r'))

but if you're not using YAML, don't worry. You can use JSON, Python source code
or any other method to construct a Python dict with the configuration
information, then call the proposed new configuration API using code like

import logging.config

logging.config.dictConfig(config)

to put the configuration into effect.

For full details of the proposed change to logging, see PEP 391 at

http://www.python.org/dev/peps/pep-0391/

I need your feedback to make this feature as useful and as easy to use as
possible. I'm particularly interested in your comments about the dictionary
layout and how incremental logging configuration should work, but all feedback
will be gratefully received. Once implemented, the configuration format will
become subject to backward compatibility constraints and therefore hard to
change, so get your comments and ideas in now!

Thanks in advance,


Vinay Sajip





More information about the Python-list mailing list