• 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())
  • 相关阅读:
    SpringBoot_04springDataJPA
    SpringBoot_03mybatisPlus
    SpringBoot_02通用mapper
    SpringBoot_01
    MySQL索引背后的数据结构及算法原理
    learnVUE-note
    Java集合
    Java虚拟机的类加载机制
    设计模式中类之间的关系
    设计模式——创建型模式
  • 原文地址:https://www.cnblogs.com/callyblog/p/10388543.html
Copyright © 2020-2023  润新知