añadido decorador y funcion de excepciones

This commit is contained in:
2025-10-31 15:45:00 +01:00
parent 64e1c0e970
commit 5943e2ba9c
+41 -1
View File
@@ -1,7 +1,9 @@
import time
import json
import requests
from typing import Optional, Dict, Any
import traceback
from typing import Optional, Dict, Any, Callable
from functools import wraps
class LokiLogger:
@@ -135,6 +137,17 @@ class LokiLogger:
def error(self, message, labels=None, metadata=None):
self.log("ERROR", message, labels, metadata)
def exception(self, exc: Exception, labels=None, metadata=None):
"""
Registra una excepción con traceback incluido.
Uso típico dentro de un bloque try/except.
"""
tb = traceback.format_exc()
message = str(exc)
metadata = metadata or {}
metadata["traceback"] = tb
self.log("ERROR", message, labels=labels, metadata=metadata)
def fatal(self, message, labels=None, metadata=None):
self.log("FATAL", message, labels, metadata)
@@ -143,3 +156,30 @@ class LokiLogger:
def unknown(self, message, labels=None, metadata=None):
self.log("UNKNOWN", message, labels, metadata)
# 🧩 Nuevo decorador
def catch_exceptions(self, reraise: bool = False):
"""
Decorador que captura cualquier excepción dentro de la función,
la loguea con traceback, y opcionalmente la relanza.
Ejemplo:
@logger.catch_exceptions()
def run_job():
...
"""
def decorator(func: Callable):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
tb = traceback.format_exc()
self.error(
f"Exception en función '{func.__name__}': {e}",
metadata={"traceback": tb},
)
if reraise:
raise
return wrapper
return decorator