miniqmt 函数分享-1.函数执行跟踪

miniqmt 函数分享

1. 函数执行跟踪

函数介绍:

这个代码是一个用于日志记录和追踪函数执行的 Python 脚本。它使用 loguru 库进行日志管理,并通过装饰器 trace_context 来追踪函数的执行时间和上下文信息。

主要部分:

  1. 日志配置configure_logger 函数用于设置日志文件和格式。
  2. 追踪上下文TraceContext 类用于生成包含唯一ID和时间戳的追踪信息。
  3. 函数装饰器trace_context 装饰器在函数执行前后记录日志,记录开始和结束时间及追踪信息。
  4. 示例函数log_tc 函数使用装饰器,模拟处理时间。

最后,如果直接运行该脚本,log_tc(2) 将会被调用,模拟等待2秒,并记录相关日志信息。

源码:

# coding=utf-8
"""
@project: bs_qmt
@Author:langlangago
@file: sdk.py
@date:2024/9/24 18:46
"""

from loguru import logger
import time
from typing import Any, Dict, Callable, TypeVar
from dataclasses import dataclass
import random
import string
from datetime import datetime

T = TypeVar('T')

# logger.add("my_test.log", rotation="100 MB", level="INFO")
def configure_logger(log_path: str) -> None:
    logger.remove()  # 移除默认的日志配置
    logger.add(log_path, rotation="100 MB", level="INFO")

@dataclass
class TraceContext:
    id: str
    tp: str

    def to_dict(self) -> Dict[str, Any]:
        return self.__dict__

class ScriptBase:
    def generate_id(self) -> str:
        return ''.join(random.choices(string.ascii_letters + string.digits, k=8))

    def traceContext(self) -> TraceContext:
        return TraceContext(id=self.generate_id(), tp=datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

def trace_context(func: Callable[..., T]) -> Callable[..., T]:
    def wrapper(*args, **kwargs) -> T:
        base = ScriptBase()
        tc = base.traceContext()

        logger.info(f"开始执行函数: {func.__name__}, 追踪信息: {tc.to_dict()}")
        start_time = time.time()

        result = func(*args, **kwargs)

        duration = time.time() - start_time
        logger.info(f"结束执行函数: {func.__name__}, 耗时: {duration:.4f}秒, 追踪信息: {tc.to_dict()}")
        return result

    return wrapper

示例:

# 使用示例
from utils.sdk import trace_context as tc, configure_logger

configure_logger("logs/my_test.log")  # 可以修改为您想要的路径

@trace_context
def log_tc(param: int) -> str:
    time.sleep(param)
    return f"处理完成,参数: {param}"
if __name__ == '__main__':
    log_tc(2)

运行效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值