在发送请求的时候,需要添加对应的日志记录,所以在requests库中封装日志功能。
日志需要在控制台中输出出来的同时又能保存在文件中。
封装日志
日志文件中产生的日志 需要存放在 项目的根目录下 logs 文件下。
utils/mylogger.py
"""定义日志文件"""import logging# 配置logging 设置日志记录器的名字logger = logging.getLogger("apitesting")# 配置logger的级别logger.setLevel(logging.DEBUG)# 配置通用的日志格式 时间 日志级别 记录器名字 日志信息format = logging.Formatter('%(asctime)s %(levelname)s %(name)s %(message)s')# 配置控制台打印sh = logging.StreamHandler()# 设置日志级别sh.setLevel(logging.DEBUG)# 设置日志格式sh.setFormatter(format)# 将控制台打印 添加到logger中logger.addHandler(sh)# 日志文件按天划分,每次执行的时候,比如今天是 2022-2-13, 创建目录 2022-2 表示2022年2月份日志# 在目录中创建文件 13.log 表示13日的日志import timeimport os# 年 - 月dir = time.strftime("%Y-%m")file = time.strftime("%d") # 日print(dir,file)# 创建目录 设置logs 目录logs = os.path.join(os.path.dirname(os.path.dirname(__file__)),'logs')if not os.path.exists(logs):os.mkdir(logs)# 拼接日志目录和 年-月 的目录log_dir= os.path.join(logs,dir)if not os.path.exists(log_dir):os.mkdir(log_dir)# 日志文件 拼接log_file = os.path.join(log_dir,file+".log")# 配置文件存储fh = logging.FileHandler(filename=log_file, encoding='utf8')# 日志文件的 级别fh.setLevel(logging.DEBUG)# 日志文件的内容格式fh.setFormatter(format)# 将日志文件配置添加到loggerlogger.addHandler(fh)if __name__ == '__main__':logger.info("hahahah")
封装myrequests
将日志功能放入到自己定义的请求库中。
utils/myrequests.py
import requestsfrom utils.mylogger import loggerclass MyRequests:def __init__(self):self.logger = loggerdef do_requests(self, method, url, params=None, data=None, json=None, **kwargs):"""自定义请求:param method: 请求方法:param url: 请求的url:param params: get请求参数:param data: post请求参数:param json: post 请求参数:param kwargs: 其他参数:return:"""if method == 'get':# 添加日志self.logger.debug(f"发送get请求,请求地址:{url},请求参数: {params}")# 调用requests get 请求r = requests.get(url, params=params, **kwargs)# 添加日志self.logger.debug(f"服务器返回结果:{r.text}")return relif method == "post":self.logger.debug(f'发送post请求,请求地址:{url},请求数据:{json}, {data}')r = requests.post(url, data=data, json=json, **kwargs)self.logger.debug(f'服务器返回结果:{r.text}')return rif __name__ == '__main__':# 模拟发送请求req = MyRequests()req.do_requests(method='get', url="http://47.100.175.62:3000/api/v1/topics")
