import logging
import os
import time
import functools
#两个函数
#logging
def api_log():
    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 - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger


log=api_log()
#functools装饰器
def loger(func_name):
    @functools.wraps(func_name)
    def inner(*args,**kwargs):
        log.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:
            log.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