美文网首页
python—log&loguru

python—log&loguru

作者: 小二哥很二 | 来源:发表于2021-04-13 16:30 被阅读0次

    一、Log:之前写了一篇python log模块的笔记,但是写了又忘记,回头去看又蒙圈。最近在写项目,于是又复习回顾了一遍,更加的系统:

    整体来说,遵循以下几个步骤,就不混乱了:

    • 创建日志器logger = logging.getLogger(),初始化
    • 创建控制台处理器StreamHandler
    • 定义格式器处理器,包括终端打印&写入文件时候的格式,为全局格式
    • 将日志器logger放到控制台处理器
    • 将格式器放到控制台处理器
      一定遵循创建了handler,就添加一次formatter和handler,以免混乱

    代码如下:

    import logging
    import os
    from logging.handlers import TimedRotatingFileHandler
    
    log_path = os.path.dirname(os.path.abspath('.')) + "\\logs\\"
    # file_info_name = os.path.join(log_path, "info", "info.log")
    # print(file_info_name)
    
    class Logger(object):
    
        # 初始化,am可以不填写
        logger = logging.getLogger("am")
        # 清除logger,避免多个文件引用重复打印log
        logger.handlers.clear()
        # 设置log等级
        logger.setLevel(logging.DEBUG)
        backup_count = 5
        formatter = logging.Formatter('[%(asctime)s %(filename)s line:%(lineno)d] %(levelname)s: %(message)s')
    
        # 设置控制台
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.DEBUG)
        # 给handler添加formatter
        console_handler.setFormatter(formatter)
        # 给logger添加handler
        logger.addHandler(console_handler)
    
        # 文件--Info
        file_info_name = os.path.join(log_path, "info", "info.log")
        file_info_handler = logging.handlers.TimedRotatingFileHandler(filename=file_info_name, when='D',
                                                                      interval=1, backupCount=backup_count,
                                                                      encoding='utf-8')
        file_info_handler.setLevel(logging.INFO)
        # 给handler添加formatter
        file_info_handler.setFormatter(formatter)
        # 给logger添加handler
        logger.addHandler(file_info_handler)
    
        # 文件--Error
        file_error_name = os.path.join(log_path, "error", "error.log")
        file_error_handler = logging.handlers.TimedRotatingFileHandler(filename=file_error_name, when='D',
                                                                       interval=1, backupCount=backup_count,
                                                                       encoding='utf-8')
        file_error_handler.setLevel(logging.ERROR)
        file_error_handler.setFormatter(formatter)
        logger.addHandler(file_error_handler)
    
        def info(self, msg, *args, **kwargs):
            self.logger.info(msg, *args, **kwargs)
    
        def error(self, msg, *args, **kwargs):
            self.logger.error(msg, *args, **kwargs)
    
        def warning(self, msg, *args, **kwargs):
            self.logger.warning(msg, *args, **kwargs)
    
        def exception(self, msg, *args, exc_info=True, **kwargs):
            self.logger.exception(msg, *args, exc_info, **kwargs)
    

    PS:虽然上面写了不同等级输出文件不同,但是info文件里的日志最全,包含更高等级的日志内容

    二、loguru:log模块使用起来要做很多操作,而loguru就使日志更加的简单优美

    from loguru import logger
    
    
    # 使用装饰器,方便在配置不完善的情况下记录traceback
    @logger.catch()
    def test(x, y, z):
        """
        rotation:{time}.log可以生成标准时间,可以设置大小rotation = 500 MB
                    每天0点生成一个log文件:rotation = ”00:00“
                    一周生成一个文件:rotation = ”1 week“
        retention:代表日志文件最长保留多少天:10 days,1 week,2 months
        :return:
        """
        # trace = logger.add('runtime_{time}.log', rotation="500 MB")
        # {time}.log可以根据格式化的时间命名日志文件
        # logger.add('runtime_{time}.log', rotation="500 MB", retention="10 days")
        logger.add('loguru.log', rotation="500 MB", retention="10 days")
        logger.info('I love u very much')
    
        # logger.remove(xx),可以删除日志不写入日志文件
        # logger.remove(trace)
        logger.debug('this is another debug message')
    
        # 字符串格式化输出
        logger.error('If you are using Python {}, prefer {feature} of course!', 3.7, feature='f-string')
    
        return 1 / (x + y + z)
    
    
    test(0, 0, 0)
    

    输出示意图:


    终端日志打印

    ※注意:虽然loguru简洁优美,但是小二我还没找到loguru设置日志保存时间等更多的方法介绍,大家可自行百度或官网学习

    相关文章

      网友评论

          本文标题:python—log&loguru

          本文链接:https://www.haomeiwen.com/subject/gbrclltx.html