(自分にとって)使いやすい感じの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