43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import sys
|
|
import time
|
|
from functools import wraps
|
|
from loguru import logger
|
|
|
|
from commons.settings import settings
|
|
|
|
|
|
def log_performance(func):
|
|
"""Decorator to log function performance"""
|
|
|
|
@wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
start_time = time.time()
|
|
logger.debug("Starting {}", func.__name__)
|
|
|
|
try:
|
|
result = func(*args, **kwargs)
|
|
duration = time.time() - start_time
|
|
logger.debug("{} completed in {:.2f}s", func.__name__, duration)
|
|
return result
|
|
except Exception as e:
|
|
duration = time.time() - start_time
|
|
logger.error("{} failed after {:.2f}s: {}", func.__name__, duration, str(e))
|
|
raise
|
|
|
|
return wrapper
|
|
|
|
|
|
def setup_logger():
|
|
"""Configure and setup logger"""
|
|
logger.remove() # Remove default handler
|
|
|
|
logger.add(
|
|
sys.stderr,
|
|
level="DEBUG" if settings.debug else "INFO",
|
|
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
|
|
colorize=True,
|
|
backtrace=True,
|
|
diagnose=True
|
|
)
|
|
|
|
return logger |