(自分にとって)使いやすい感じのlogger

handlernameに'FILEANDSTREAM'を指定することで、ファイルと標準出力両方にログが出る。

# -*- coding: utf-8 -*-
from logging import getLogger, StreamHandler, FileHandler
from logging import INFO, DEBUG, WARNING, ERROR, CRITICAL
from logging import Formatter

level = {'INFO': INFO,
         'DEBUG': DEBUG,
         'WARNING': WARNING,
         'ERROR': ERROR,
         'CRITICAL': CRITICAL,
         }
handler = {'STREAMHANDLER': lambda x: (StreamHandler(), ),
           'FILEHANDLER': lambda x: (FileHandler(x), ),
           'FILEANDSTREAM': lambda x: (StreamHandler(), FileHandler(x))
           }

def logger(logname,
           handlername='STREAMHANDLER',
           logfilename=None,
           loglevel='DEBUG',
           format='%(asctime)s\t%(name)s\t%(levelname)s\t%(message)s'):
    log = getLogger(logname)

    l = level.get(loglevel.upper())
    log.setLevel(l)

    logfilename = logfilename if logfilename else '%s.log' % logname
    handlers = handler.get(handlername.upper())(logfilename)
    for h in handlers:

        f = Formatter(format)
        h.setFormatter(f)
        h.setLevel(l)
        log.addHandler(h)

    return log