python 自定义好用logger模块
# -*- coding:utf-8 -*- import sys import logging.handlers DEFAULT_LOG_FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s' DEFUALT_LOG_DATEFMT = '%Y-%m-%d %H:%M:%S' Handlers = { # logging.NOTSET : "./log/NOTSET.log", logging.DEBUG: "./log/DEBUG.log", logging.INFO: "./log/INFO.log", logging.WARNING: "./log/WARNING.log", logging.ERROR: "./log/ERROR.log", # logging.CRITICAL : "./log/CRITICAL.log" } class Logger(object): def __init__(self): # set formatter ,the log will print like this formatter self.formatter = logging.Formatter(fmt=DEFAULT_LOG_FMT, datefmt=DEFUALT_LOG_DATEFMT) self.log_set = {} # get logger and set handler for level in Handlers.keys(): logger = logging.getLogger(str(Handlers[level])) if not logger.handlers: logger.addHandler(self._get_rotating_file_handler(Handlers[level])) logger.addHandler(self._get_console_handler()) logger.setLevel(level) self.log_set[level] = logger else: self.log_set[level] = logger def _get_console_handler(self): '''get console handler,will print log on console''' console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(self.formatter) return console_handler def _get_rotating_file_handler(self, filename): '''get a file handler,will write log in file''' rotating_handler = logging.handlers.RotatingFileHandler(filename=filename, maxBytes=104857600, backupCount=5, encoding="utf-8") rotating_handler.setFormatter(self.formatter) return rotating_handler @property def debug(self): '''return a function that write debug message''' return self.log_set[logging.DEBUG].debug @property def info(self): '''return a function that write info message''' return self.log_set[logging.INFO].info @property def warning(self): '''return a function that write warning message''' return self.log_set[logging.WARNING].warning @property def error(self): '''return a function that write error message''' return self.log_set[logging.ERROR].error logger = Logger() if __name__ == '__main__': logger.debug("debug")
非常好用的自定义logger模块
可以设置控制台输出和写入文件
对于写入数据库还需努力