10.接口自动化之工具封装004:python 日志封装
2024-03-24 本文已影响0人
小小一颗卤蛋
log技术
日志的作用:可以分析问题,协助找到bug,更容易找到报错信息,定制化的输出一些需要查看的数据信息,也可以为性能测试分析提供一些可用信息。
日志的查看:
1、直接打开 xxx.log文件查看
2、在docker(docker logs -f 容器id),k8s(kubectl logs -f pod名字)集群
3、以web页面形式体现
日志输出形式如下:
2024-04-02 21:36:22,baseAPI(line:50),INFO|模块名:Login
2024-04-02 21:36:22,baseAPI(line:50),INFO|接口名:login
2024-04-02 21:36:22,baseAPI(line:50),INFO|请求url:http://121.41.39:8082/account/sLogin
日志编写以及参数如下:
logging.basicConfig(format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
filename=f'../logs/{datetime.datetime.now().strftime("%Y-%m-%d-%H.%M.%S")}.txt',
level=logging.INFO,
filemode='a')
return logging
日志输出常用的参数: 日志常见参数logging.basicConfig函数各参数
format:指定输出的格式和内容,format可以输出很多有用的信息
filename:指定的日志文件名称
filemode:和file函数意义相同,指定日志文件的打开模式,'w'或者'a'
日志封装
from configparser import ConfigParser
from loguru import logger
from utils.handle_path import log_path, config_path
from time import strftime
import os
class MyLog():
__instance = None # 单例实现
__call_flag = True # 控制init调用,如果调用过就不再调用
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = super().__new__(cls)
return cls.__instance
def get_log(self):
if self.__call_flag: # 看是否调用过----日志设置操作---全局操作--一次就够了
__curdate = strftime('%Y%m%d-%H%M%S')
cfg = ConfigParser()
cfg.read(os.path.join(config_path,'loguru.ini'), encoding='utf-8')
logger.remove(handler_id=None) # 关闭console输出
#把loguru.ini的配置文件生效!!!
logger.add(os.path.join(log_path,'waimai_') + __curdate + '.log', encoding='utf8', # 日志存放位置
retention=cfg.get('log', 'retention'), # 清理
rotation=cfg.get('log', 'rotation'), # 循环 达到指定大小后建立新的日志
format=cfg.get('log', 'format'), # 日志输出格式
compression=cfg.get('log', 'compression'), # 日志压缩格式
level=cfg.get('log', 'level')) # 日志级别
self.__call_flag = False # 如果调用过就置为False
return logger
log = MyLog().get_log() # 如果这个 handle_log 别人import 这句话一定会被执行
if __name__ == '__main__':
log.error('testing')
log.info('hello')
loguru.ini的配置文件(放到configs文件下)
[log]
format = {time:YYYY-MM-DD HH:mm:ss},{module}(line:{line}),{level}|{message}
level = INFO
rotation = 10 MB
retention = 2 days
compression = zip