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

image

 

posted @ 2025-11-27 23:27  漫漫长路</>  阅读(0)  评论(0)    收藏  举报