Python项目日志使用记录(loguru)

Python项目日志使用记录(loguru)

效果如下
在这里插入图片描述

封装如下

  • 实现多文件记录
  • 支持每天新建文件目录(年-月-日)
import os
import datetime
from loguru import logger
from config import BASE_DIR


class Logings:
    __logger = dict()

    def __init__(self, file_name='info'):
		self.file_name = file_name
        if Logings.__logger.__contains__(file_name):
            self.logger = Logings.__logger[file_name][1]
            return
        
        date = datetime.datetime.now().strftime('%Y-%m-%d')
        self.__add_logger(date)

    # def __new__(cls, *args, **kwargs):
    #     if not cls.__instance:
    #         cls.__instance = super(Logings, cls).__new__(cls, *args, **kwargs)
    #     return cls.__instance

    def __add_logger(self, date):
        # 文件名称,按天创建 项目路径下创建logs/{date} 目录保存日志文件
        logpath = f'{BASE_DIR}/logs/{date}'
        # 判断目录是否存在,不存在则创建新的目录
        if not os.path.isdir(logpath): os.makedirs(logpath)
        handler_id =logger.add(f'{logpath}/{self.file_name}.log',  # 指定文件
                                format="{time}  | {level}| {message}",
                                # format="{time:YYYY-MM-DD HH:mm:ss}  | {level}> {elapsed}  | {message}",
                                encoding='utf-8',
                                retention='7 days',  # 设置历史保留时长
                                backtrace=True,  # 回溯
                                diagnose=True,  # 诊断
                                enqueue=True,  # 异步写入
                                rotation="1024kb",  # rotation="5kb"  # 切割,设置文件大小,rotation="12:00" 
                                filter=lambda record: record["extra"].get("name") == self.file_name  # 过滤模块
                                # compression="zip"   # 文件压缩
                                )
        self.logger = logger.bind(name=self.file_name)
        Logings.__logger[self.file_name] = (handler_id, self.logger, date)

    def __check_update_handler(self):
        if Logings.__logger.__contains__(self.file_name):
            date = datetime.datetime.now().strftime('%Y-%m-%d')
            if date > Logings.__logger[self.file_name][2]:
                logger.remove(Logings.__logger[self.file_name][0])
                self.__add_logger(date)

    def info(self, msg, *args, **kwargs):
        self.__check_update_handler()
        return self.logger.info(msg, *args, **kwargs)

    def debug(self, msg, *args, **kwargs):
        self.__check_update_handler()
        return self.logger.debug(msg, *args, **kwargs)

    def warning(self, msg, *args, **kwargs):
        self.__check_update_handler()
        return self.logger.warning(msg, *args, **kwargs)

    def error(self, msg, *args, **kwargs):
        self.__check_update_handler()
        return self.logger.error(msg, *args, **kwargs)

    def exception(self, msg, *args, exc_info=True, **kwargs):
        self.__check_update_handler()
        return self.logger.exception(msg, *args, exc_info=True, **kwargs)


info_log = Logings()
error_log = Logings('error')
req_log = Logings('request')

指定模块记录
  • 实例化Logings
    • 示例:
class TaskDispatch(object):

    sc_type = None
    req_data = dict()
    req_header = None
	logger = None


    def __init__(self, **kwargs):
        self.logger = Logings(self.__class__.__name__)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值