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
上一篇下一篇

猜你喜欢

热点阅读