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 time
import json import json
import requests import requests
from typing import Optional, Dict, Any import traceback
from typing import Optional, Dict, Any, Callable
from functools import wraps
class LokiLogger: class LokiLogger:
@@ -135,6 +137,17 @@ class LokiLogger:
def error(self, message, labels=None, metadata=None): def error(self, message, labels=None, metadata=None):
self.log("ERROR", message, labels, metadata) 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): def fatal(self, message, labels=None, metadata=None):
self.log("FATAL", message, labels, metadata) self.log("FATAL", message, labels, metadata)
@@ -143,3 +156,30 @@ class LokiLogger:
def unknown(self, message, labels=None, metadata=None): def unknown(self, message, labels=None, metadata=None):
self.log("UNKNOWN", message, labels, metadata) 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