añadido decorador y funcion de excepciones
This commit is contained in:
+41
-1
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user