python控制日志级别输出,可进行全局限流,可控制控制台输出,可用于线上配置,进行日志的简单记录

本文介绍了如何使用Python的logging模块来控制日志级别,实现全局限流,以及如何设置控制台输出。同时,讨论了如何进行线上配置,以便灵活调整日志记录策略,为应用程序的日志记录提供便利。
# coding=utf-8
import logging
import datetime
import os


CONSOLE = True
LEVEL = "DEBUG"
# log/2020-09/2020-09-27_APPLICATION_NAME.log
APPLICATION_NAME = "APPLICATION_NAME"


# 只生成GBK的日志文件

class RecordLog:

    def __init__(self):
        """
        1、控制日志是否在控制台中打印
        2、控制日志输出的级别
        """
        # 设置是否控制台打印
        self._console = CONSOLE
        # 等级字典
        self._level_dict = {'DEBUG':1,'INFO':2,'WARNING':3,'ERROR':4,'CRITICAL':5}
        # 设置当前支持的日志等级
        self._current_level_num = self._level_dict[LEVEL]

    def get_log_file_name(self,):
        """
        创建日志文件夹,创建或调用日志文件,日志存储
        :return: log/log_folder(月份)/log_file(每天的log)
        """
        now = str(datetime.datetime.now())
        log_folder = now[:7]
        log_file = now[:10] + "_" + APPLICATION_NAME + ".log"
        if os.path.exists("log/" + log_folder):
            pass
        else:
            os.makedirs("log/" + log_folder)
        return "log/" + log_folder + "/" + log_file

    def log_content(self, content='开始记录',level="DEBUG"):
        """
        记录日志
        :param content: 记录的内容
        :param level: DEBUG, INFO, WARNING, ERROR, CRITICAL
        :return:
        """
        LOG_FILE_NAME = self.get_log_file_name()
        now1 = datetime.datetime.now()
        now_date = now1.strftime("%Y-%m-%d-%H:%M:%S")
        text = " %s %s -- %s" % (level, now_date, content)
        if level in ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']:
            level_num = self._level_dict[level]
            # 控制台输出
            if self._console:
                print(text)

            logger = logging.getLogger()
            fh = logging.FileHandler(filename=LOG_FILE_NAME, encoding="utf-8", mode="a")
            # formatter = logging.Formatter("%(asctime)s - %(name)s-%(levelname)s %(message)s")
            # fh.setFormatter(formatter)
            logger.addHandler(fh)
            # 设置日志等级
            if "DEBUG" == level and level_num >= self._current_level_num:
                logger.setLevel(logging.DEBUG)
            elif "INFO" == level and level_num >= self._current_level_num:
                logger.setLevel(logging.INFO)
            elif "WARNING" == level and level_num >= self._current_level_num:
                logger.setLevel(logging.WARNING)
            elif "ERROR" == level and level_num >= self._current_level_num:
                logger.setLevel(logging.ERROR)
            else:
                logger.setLevel(logging.CRITICAL)
            logger.info(text)
        else:
            raise Exception('日志等级传参错误: %s ; 正确格式为:DEBUG, INFO, WARNING, ERROR, CRITICAL'%level)


if __name__ == '__main__':
    #
    log = RecordLog()
    log.log_content(level='DEBUG')
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值