python的日志使用装饰器,记录的日志文件记录
python的日志使用装饰器
log.py
import logging from functools import wraps import os # --- 1. 日志配置(创建日志文件) --- LOG_FILENAME = 'function_calls.log' # 确保在开始时清除旧日志文件,便于演示 if os.path.exists(LOG_FILENAME): os.remove(LOG_FILENAME) logging.basicConfig( level=logging.INFO, # 设置最低记录级别为 INFO format='%(asctime)s - %(levelname)s - %(message)s', filename=LOG_FILENAME, # 日志文件名称 filemode='a', # 使用追加模式 ('a'),记录多次函数调用 ) logger = logging.getLogger(__name__) # --- 2. 日志装饰器 --- def log_function_call(func): """ 一个简单的装饰器,用于记录函数的调用和返回结果。 """ @wraps(func) def wrapper(*args, **kwargs): # 记录函数调用信息 args_repr = [repr(a) for a in args] kwargs_repr = [f"{k}={repr(v)}" for k, v in kwargs.items()] signature = ", ".join(args_repr + kwargs_repr) logger.info(f"调用函数 {func.__name__},参数: ({signature})") try: # 调用原函数 result = func(*args, **kwargs) # 记录函数返回结果 logger.info(f"函数 {func.__name__} 执行完毕,返回结果: {repr(result)}") return result except Exception as e: # 记录异常信息 logger.error(f"函数 {func.__name__} 执行失败,异常: {e}", exc_info=True) raise # 重新抛出异常,保持原函数的行为 return wrapper
在main函数导入
from log import log_function_call #在def上面@使用 #@log_function_call #def write_json_file(data): # 写入json


浙公网安备 33010602011771号