Source code for bot.log

# bot/log.py
#
# 

""" provide logging infrastructure. """

## bot imports

from bot.defines import BOLD, BLUE, RED, GREEN, ENDC

## basic imports

import logging
import os
import re

## runtime logging variables

logfilter = ["looponce", "PING", "PONG"]
logplugs = []

## defines

datefmt = BOLD + BLUE + '%H:%M:%S' + ENDC
format = "%(asctime)-8s -=- %(message)-84s -=- (%(module)s.%(lineno)s)" 
format_small = "%(asctime)-8s -=- %(message)s"

LEVELS = {'debug': logging.DEBUG,
          'info': logging.INFO,
          'warning': logging.WARNING,
          'warn': logging.WARNING,
          'error': logging.ERROR,
          'critical': logging.CRITICAL
        }

## Formatter class

[docs]class Formatter(logging.Formatter): """ hooks into the logging system. """
[docs] def format(zelf, record): target = str(record.msg) if not target: target = " " if target[0] in [">", ]: target = "%s%s%s%s" % (RED, target[0], ENDC, target[1:]) elif target[0] in ["<", ]: target = "%s%s%s%s" % (GREEN, target[0], ENDC, target[1:]) else: target = "%s%s%s %s" % (GREEN, "!", ENDC, target) record.msg = target return logging.Formatter.format(zelf, record) ## MyFilter class
[docs]class Filter(logging.Filter):
[docs] def filter(zelf, record): for f in logfilter: if f in str(record.msg): return False for modname in logplugs: if modname == record.module: record.levelno = logging.WARN ; return True return True ## provide a factory function returning a logger ready for use
[docs]def log_config(loglevel): """ return a properly configured logger. """ logger = logging.getLogger("") formatter = Formatter(format, datefmt=datefmt) formatter_short = Formatter(format_small, datefmt=datefmt) level = LEVELS.get(str(loglevel).lower(), logging.NOTSET) filehandler = None logger.setLevel(level) if logger.handlers: for handler in logger.handlers: logger.removeHandler(handler) try: filehandler = logging.handlers.TimedRotatingFileHandler(j(homedir, "etslog", "ets.log"), 'midnight') except: pass ch = logging.StreamHandler() ch.setLevel(level) if level < logging.WARNING: ch.setFormatter(formatter) else: ch.setFormatter(formatter_short) ch.addFilter(Filter()) logger.addHandler(ch) if filehandler: filehandler.setLevel(level) logger.addHandler(filehandler) return logger