• 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')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    指定模块记录
    • 实例化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__)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Nginx高级技巧:实现负载均衡和反向代理
    如何在linux服务器上安装Anaconda与pytorch
    C语言详解系列——关于调试那些事
    【0224】源码分析RelFileNode对smgr访问磁盘表文件的重要性(2)
    Zookeeper高级_选举机制
    python之计算市场技术指标
    从.net开发做到云原生运维(零)——序
    Inno Setup 打包脚本笔记
    Golang GMP调度模型:实现高效协程调度和执行
    JAVA基础(三十四)——异常处理
  • 原文地址:https://blog.csdn.net/qq_42874994/article/details/127968503