__init__.py 2.62 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
# ‐*‐coding:utf‐8 ‐*‐ #
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# ProjectName: program01
# FileName: __init__.py
# Author: Conner-Lee
# Datetime: 2024/11/6 19:36
# Description: 
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
import functools
import logging
import os.path
import time


def api_log():
    # 创建Logger对象
    logger = logging.getLogger()
    # 设置日志级别
    logger.level = logging.INFO
    # 设置文件存放的路径
    log_dir_path = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log")
    log_file_name = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + ".log"
    log_path = os.path.join(log_dir_path, log_file_name)
    # 创建代理对象
    handler = logging.FileHandler(filename=log_path, mode="a", encoding="utf-8")
    # 设置日志显示格式
    formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
    # 给代理对象设置日志格式
    handler.setFormatter(formatter)
    # 给日志添加代理对象
    logger.addHandler(handler)
    return logger

logor = api_log()


# 定义一个装饰器,来使用log
def log(func_name):

    # 装饰器返回内部函数时,沿用被装饰者的名称
    @functools.wraps(func_name)
    def inner(*args, **kwargs):
        # __code__: 返回函数或方法的对象,可以获取函数或者方法的属性。
        # __code__.co_filename:获取函数或方法所在的py文件
        # __code__.co_firstlineno:获取函数或方法所在的py文件开始行号
        logor.info(f"执行的功能为:{func_name.__name__}, 功能描述为:{func_name.__doc__}, 所在的py文件为:{func_name.__code__.co_filename}, 所在的行为:{func_name.__code__.co_firstlineno}行,形参的值为:{args}或{kwargs}")
        try:
            result = func_name(*args, **kwargs)
        except Exception as e:
            logor.error(
                f"执行的功能为:{func_name.__name__}, 功能描述为:{func_name.__doc__}, 所在的py文件为:{func_name.__code__.co_filename}, 所在的行为:{func_name.__code__.co_firstlineno}行,形参的值为:{args}或{kwargs}"
                f"错误的类型为:{type(e)}, 错误的描述为:{e}")
            raise e
        else:
            return result
    return inner