miniqmt 函数分享
1. 函数执行跟踪
函数介绍:
这个代码是一个用于日志记录和追踪函数执行的 Python 脚本。它使用 loguru
库进行日志管理,并通过装饰器 trace_context
来追踪函数的执行时间和上下文信息。
主要部分:
- 日志配置:
configure_logger
函数用于设置日志文件和格式。 - 追踪上下文:
TraceContext
类用于生成包含唯一ID和时间戳的追踪信息。 - 函数装饰器:
trace_context
装饰器在函数执行前后记录日志,记录开始和结束时间及追踪信息。 - 示例函数:
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)