python log日志(二)

上一篇文章已经介绍log简单使用方法,本文介绍下另一种用法,可以打印日志,同时记录日志文件,可以控制日志颜色
import inspect
import logging
import logging.handlers


import os
from colorama import Fore, Style




logger_dict = {}




class LyrebirdLogger:
    def __init__(self, name):
        file_fmt = '[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s'
        date_fmt = '%Y-%m-%d %H:%M:%S'
        level = logging.DEBUG
        log_file = os.path.join(os.path.join(os.path.expanduser('~'), '.yourtoolpath'), 'log.log')
        mode = 'a'
        encoding = 'UTF-8'
        max_bytes = 1024*1024*2
        back_count = 1
        file_handler = create_file_handler(level, file_fmt, date_fmt, log_file, mode, max_bytes, back_count, encoding)
        self.name = name
        self.logger = logging.getLogger(name)
        self.logger_prefix = get_logger_prefix()
        self.logger.setLevel(level)
        self.logger.addHandler(file_handler)


    def debug(self, *msg):
        print(tag_blue(self.logger_prefix), *msg)
        self.logger.debug(get_msg(tag_blue(self.logger_prefix), *msg))


    def info(self, *msg):
        print(tag_green(self.logger_prefix), *msg)
        self.logger.info(get_msg(tag_green(self.logger_prefix), *msg))


    def warning(self, *msg):
        print(tag_yellow(self.logger_prefix), *msg)
        self.logger.warning(get_msg(tag_yellow(self.logger_prefix), *msg))


    def error(self, *msg):
        print(tag_red(self.logger_prefix), *msg)
        self.logger.error(get_msg(tag_red(self.logger_prefix), *msg))


    def critical(self, *msg):
        print(tag_red(self.logger_prefix), *msg)
        self.logger.critical(get_msg(tag_red(self.logger_prefix), *msg))




def tag_green(msg):
    if not msg:
        return ''
    return f'{Fore.GREEN}{msg}{Style.RESET_ALL}'




def tag_yellow(msg):
    if not msg:
        return ''
    return f'{Fore.YELLOW}{msg}{Style.RESET_ALL}'




def tag_blue(msg):
    if not msg:
        return ''
    return f'{Fore.BLUE}{msg}{Style.RESET_ALL}'




def tag_red(msg):
    if not msg:
        return ''
    return f'{Fore.RED}{msg}{Style.RESET_ALL}'




def tag_cyan(msg):
    if not msg:
        return ''
    return f'{Fore.CYAN}{msg}{Style.RESET_ALL}'




def get_msg(*msg):
    func_name = get_current_func_name()
    line_num = get_current_line_num()
    message = '[%s] [%d] ' % (func_name, line_num)
    for i in range(len(msg)):
        message = message + str(msg[i]) + ' '
    return message




def create_file_handler(level, fmt, date_fmt, log_file, mode, max_bytes, back_count, encoding):
    file_handler = logging.handlers.RotatingFileHandler(log_file, mode, max_bytes, back_count, encoding)
    file_handler.setLevel(level)
    formatter = logging.Formatter(fmt, date_fmt)
    file_handler.setFormatter(formatter)
    return file_handler




def get_logger_prefix():
    """
    获取top_module_name,拼接日志使用
    :return: 最外层包名
    """
    stack = inspect.stack()
    caller_module = inspect.getmodule(stack[1].frame)
    caller_module_name = caller_module.__name__
    if caller_module_name.find('.') > 0:
        caller_top_module_name = caller_module_name.split('.')[0]
    else:
        caller_top_module_name = caller_module_name
    return caller_top_module_name




def get_current_line_num():
    return inspect.stack()[3][2]




def get_current_func_name():
    return inspect.stack()[3][3]




def get_logger(name):
    logger = logger_dict.get(name)
    if not logger:
        logger = LyrebirdLogger(name)
        logger_dict[name] = logger
    return logger
需要日志时,调用即可
_logger = get_logger('mock_server')
_logger.info('...')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值