logging-config

A wrapper class for the Python standard logging module


License
Other
Install
pip install logging-config==1.0.0

Documentation

logging-config

💥Important💥 This project is deprecated and no longer maintained. If you'd like to take it over, please contact me.

IMPORTANT After being pointed to logutils which has a working dictConfig for earlier versions of Python, I do not intend on maintaining this module.

A configuration wrapper class for the standard Python logging package. Since DictConfigurator is not available until 2.7 and I still need to support 2.6, I wanted a consistent way to handle configuration of application logging.

Currently, this module passes tests in Python 2.5, 2.6 and 2.7.

I've attempted to match the configuration dictionary schema as much as it makes sense to do so. For more information on the configuration dictionary schema check out http://docs.python.org/library/logging.config.html#logging-config-dictschema

Installation

logging-config is available via pypi.python.org. Thus installation is as easy as:

pip install logging-config

Example Config

{'loggers': {'pika': {'propagate': True, 'level': 'INFO'},
             'tinman': {'propagate': True, 'level': 'INFO'}},
 'formatters': {'syslog': ('%(levelname)s <PID %(process)d:%(processName)s> '
                           '%(name).%(funcName)s: %(message)s'),
                'verbose': ('%(levelname) -10s %(asctime)s %(name) -30s '
                            '%(funcName) -25s: %(message)s')},
 'filters': None,
 'handlers': {'syslog': {'facility': 'local6',
                         'level': 'INFO',
                         'formatter': 'syslog',
                         'class': 'logging.handlers.SysLogHandler',
                         'address': '/var/run/syslog'},
              'console': {'formatter': 'verbose',
                          'debug_only': True,
                          'class': 'logging.StreamHandler',
                          'level': 'DEBUG'}}}

Example use

Given a yaml file "example.yaml":

%YAML 1.2
---
loggers:
  pika:
    level: INFO
    propagate: True
  tinman:
    level: INFO
    propagate: True
  file:
    filename: /var/log/example.log
    class: logging.RotatingFileHandler
    mode: a
    maxBytes: 104857600
    backupCount: 6
    encoding: UTF-8
    delay: False
    formatter: verbose
filters:
  my_logger: my_app.*
formatters:
  verbose: "%(levelname) -10s %(asctime)s %(name) -30s %(funcName) -25s: %(message)s"
  syslog: "%(levelname)s <PID %(process)d:%(processName)s> %(name).%(funcName)s: %(message)s"
handlers:
  console:
    class: logging.StreamHandler
    formatter: verbose
    debug_only: True
    level: DEBUG
  syslog:
    class: logging.handlers.SysLogHandler
    facility: local6
    address: /var/run/syslog
    filters: [my_logger]
    formatter: syslog
    level: INFO

The following code will setup the logging module with the specified handlers:

import logging_config
import yaml

with open('example.yaml', 'r') as handle:
    config = yaml.load(handle)

cfg = logging_config.Logging(config)
cfg.setup()