【Logging】Python日志模块


一、安装

pip install logging

二、使用步骤

1.引入库

封装一个log类:

import logging,os,time
from config.conf.setting_path import *

class log:
    def __init__(self,path="default",level=logging.DEBUG):
        if not os.path.exists(LOG_DIR):
            os.mkdir(LOG_DIR)
        self.logger = logging.getLogger()
        

		# 这里判断是否多次添加 handler
        if not self.logger.handlers:
            self.logger.setLevel(level)

            handler = logging.FileHandler(os.path.join(LOG_DIR, f"{path}-%s.log" % time.strftime("%Y-%m-%d-%H")),
                                          encoding='UTF-8')

            logging_format = logging.Formatter("[%(asctime)s] %(levelname)s ts %(message)s")

            handler.setFormatter(logging_format)

            stream_handler = logging.StreamHandler()
            stream_handler.setLevel(logging.INFO)
            stream_handler.setFormatter(logging_format)

			# 输出到日志文件
            self.logger.addHandler(handler)
            # 输出到控制台
            self.logger.addHandler(stream_handler)

2.输出日志

使用log类:

from utils.log import log
# 初始化log类
log = log()
# 输出日志
log.logger.info(f"{'=' * 25}{sheetname}{'=' * 25}")
log.logger.info(f"{id}_{title}")
log.logger.info(f"请求url:{url}")
log.logger.info(f"请求参数:{params}")
log.logger.info(f"请求方式:{method}")
log.logger.info(f"前置sql:{sqls}")
log.logger.info(f"预期结果:{expects}")
log.logger.info(f"实际结果:{res}")

三、拓展问题

问题描述

在这里插入图片描述

日志重复输出,且数量递增。

原因分析:没有移除handler

实际上logger = logging.getLogger(“logger”)在执行时,是先检查内存中是否存在一个叫做‘logger.log’的logger对象,存在则取出,不存在则新建。
实例化的logger对象,通过具有‘handlers’这样一个属性来存储 Handler:
logger.handlers最初是一个空列表,执行‘logger.addHandler(handler)’添加一个‘StreamHandler’,输出一条日志;
在第二次被调用时,logger.handlers已经存在一个‘StreamHandler’,再次执行‘logger.addHandler(handler)’就会再次添加一个‘StreamHandler’,此时的logger有两个‘StreamHandler’,输出两条重复的日志;
在第三次被调用时,logger.handlers已经存在两个‘StreamHandler’,再次执行‘logger.addHandler(handler)’就会再次添加一个,此时的logger有三个‘StreamHandler’,输出三条重复的日志

解决方案

方法一(推荐):

用前判断,在log方法里做判断,如果这个logger已有handler,则不再添加handler。

方法二:

每次创建不同name的logger,每次都是新logger,不会有添加多个handler的问题。

方法三(兼容性较差,不建议):

每次记录完日志之后,调用removeHandler()把这个logger里的handler移除掉。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值