Source code for sawmill.configurator.alpha

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

import sys
import tempfile
from datetime import datetime

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


[docs]def configure( email_sender, email_recipients, level='info', filepath=None, redirect_standard_logging=True, *args, **kw ): '''Alpha configurator. *level* will determine the minimum level to display on stderr. *filepath* can be used to set where the log file should be stored. It defaults to a temporary file named after the current date and time. If *redirect_standard_logging* is True then also redirect all standard library logging to Sawmill using :func:`sawmill.compatibility.redirect_standard_library_logging`. ''' # Output to standard error stream. stderr_handler = sawmill.handler.stream.Stream(sys.stderr) stderr_formatter = sawmill.formatter.template.Template( '{level}:{message}\n' ) stderr_handler.formatter = stderr_formatter stderr_filterer = sawmill.filterer.level.Level(min=level, max=None) stderr_filterer |= sawmill.filterer.item.Item('user', True) stderr_handler.filterer = stderr_filterer sawmill.root.handlers['stderr'] = stderr_handler # Output to log file if filepath is None: prefix = datetime.now().strftime('sawmill-%Y_%m_%d-%H_%M_%S-') _, filepath = tempfile.mkstemp(prefix=prefix, suffix='.log') file_stream = open(filepath, 'a') file_handler = sawmill.handler.stream.Stream(file_stream) file_formatter = sawmill.formatter.field.Field([ 'timestamp', '*', 'name', 'level', 'message', 'traceback' ]) file_handler.formatter = file_formatter sawmill.root.handlers['file'] = file_handler # Send email on errors. email_handler = sawmill.handler.email.Email( 'smtp.example.com', 587, secure=(), formatter=sawmill.formatter.email.Email( 'Error Report', email_sender, email_recipients ) ) 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 = sawmill.handler.buffer.Buffer( email_handler, check_for_error, limit=30 ) sawmill.root.handlers['email'] = email_buffer_handler if redirect_standard_logging: sawmill.compatibility.redirect_standard_library_logging()