ConfiguratorΒΆ

Full code for the Configuration tutorial:

# :coding: utf-8
# :copyright: Copyright (c) 2013 Martin Pengelly-Phillips
# :license: See LICENSE.txt.

import sys

import mill
import mill.handler.stream
import mill.handler.email
import mill.handler.buffer
import mill.formatter.template
import mill.formatter.field
import mill.filterer.level
import mill.filterer.item


def configure(*args, **kw):
    '''Example of how to configure logging system.'''
    # Output to standard error stream.
    stderr_handler = mill.handler.stream.Stream(sys.stderr)
    stderr_formatter = mill.formatter.template.Template('{level}:{message}')
    stderr_handler.formatter = stderr_formatter

    stderr_filterer = mill.filterer.level.Level(min='warning', max=None)
    stderr_filterer |= mill.filterer.item.Item('user', True)
    stderr_handler.filterer = stderr_filterer

    mill.root.handlers['stderr'] = stderr_handler

    # Output to log file
    log_path = '/path/to/logfile.log'
    file_stream = open(log_path, 'a')
    file_handler = mill.handler.stream.Stream(file_stream)

    file_formatter = mill.formatter.field.Field([
        'timestamp', 'level', 'name', 'message', '*'
    ])
    file_handler.formatter = file_formatter

    mill.root.handlers['file'] = file_handler

    # Send email on errors.
    email_handler = mill.handler.email.Email(
        'Error Report',
        'no-reply@mill.net',
        'support@mill.net'
    )

    def check_for_error(logs, buffer):
        '''Return True if any of the recent logs was an error message.'''
        for log in logs:
            if log.get('level') == 'error':
                return True

        return False

    email_buffer_handler = mill.handler.buffer.Buffer(
        email_handler,
        check_for_error,
        limit=30
    )

    mill.root.handlers['email'] = email_buffer_handler

Project Versions

Previous topic

Examples

Next topic

Reference

This Page