zoukankan      html  css  js  c++  java
  • python logging

    class TNLog(object):
    def __init__(self, log_dir, context, verbose):
    if not os.path.exists(log_dir):
    os.mkdir(log_dir)

    self.context = context
    self.root_log_dir = log_dir
    self.verbose = verbose

    self.formatter = logging.Formatter(
    '%(asctime)s-%(levelname)s:' + self.context + ':[%(filename)s:%(lineno)3d]:%(message)s',
    datefmt='%Y-%m-%d %H:%M:%S')

    # create log dir
    self.log_dir = time.strftime('%Y-%m-%d', time.localtime())

    self._create_logger()

    def _create_logger(self):
    """
    create logger
    :return:
    """
    self.loggers = {}

    if not os.path.exists(os.path.join(self.root_log_dir, self.log_dir)):
    os.mkdir(os.path.join(self.root_log_dir, self.log_dir))

    handlers = {logging.DEBUG: os.path.join(os.path.join(self.root_log_dir, self.log_dir), 'DEBUG.log'),
    logging.INFO: os.path.join(os.path.join(self.root_log_dir, self.log_dir), 'INFO.log'),
    logging.WARNING: os.path.join(os.path.join(self.root_log_dir, self.log_dir), 'WARNING.log'),
    logging.ERROR: os.path.join(os.path.join(self.root_log_dir, self.log_dir), 'ERROR.log')}
    levels = handlers.keys()
    for level in levels:
    logger = logging.getLogger(str(level))
    logger.setLevel(level)

    file_handler = logging.FileHandler(handlers[level], encoding='utf-8')
    file_handler.setLevel(level)
    file_handler.setFormatter(self.formatter)
    logger.handlers = []
    logger.addHandler(file_handler)

    self.loggers[level] = logger

    def _change_file_handler(self):
    """
    change file handler
    :return:
    """
    if not time.strftime('%Y-%m-%d', time.localtime()) == self.log_dir:
    self.loggers = {}

    self.log_dir = time.strftime('%Y-%m-%d', time.localtime())
    self._create_logger()

    def info(self, msg):
    """
    log info level
    :param msg: log message
    :return:
    """
    print(self._time+'-INFO:%s:%s' % (self.context, msg), flush=True)
    self._change_file_handler()
    self.loggers[logging.INFO].info(msg)

    def error(self, msg):
    """
    log error level
    :param msg: log message
    :return:
    """
    print(self._time+'-ERROR:%s:%s' % (self.context, msg), flush=True)
    self._change_file_handler()
    self.loggers[logging.ERROR].error(msg)

    def debug(self, msg):
    """
    log debug level
    :param msg: log message
    :return:
    """
    if self.verbose:
    print(self._time+'-DEBUG:%s:%s' % (self.context, msg), flush=True)

    self._change_file_handler()
    self.loggers[logging.DEBUG].debug(msg)

    def warning(self, msg):
    """
    log warning level
    :param msg: log message
    :return:
    """
    print(self._time + '-ERROR:%s:%s' % (self.context, msg), flush=True)
    self._change_file_handler()
    self.loggers[logging.WARNING].error(msg)

    @property
    def _time(self):
    return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
  • 相关阅读:
    高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)
    高级软件工程2017第1次作业
    2017高级软件工程 课程信息
    15061009-第0次作业(阅读与感想)
    新的開始!第一次作業
    软工实践第一次作业
    OO第四单元作业总结
    OO第二单元作业总结
    OO第一单元作业总结
    Dell BOSS 卡是什么
  • 原文地址:https://www.cnblogs.com/callyblog/p/10388543.html
Copyright © 2011-2022 走看看