Spaces:
Paused
Paused
File size: 1,433 Bytes
9e6aa30 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import contextvars
import logging
from functools import wraps
from typing import Callable
logging_uuid = contextvars.ContextVar("uuid")
formatter = '%(asctime)s | %(uuid)s [%(pathname)s:%(module)s %(lineno)d] %(levelname)s | %(message)s'
formatter_without_uuid = '%(asctime)s | [%(pathname)s:%(module)s %(lineno)d] %(levelname)s | %(message)s'
loggingType = logging.CRITICAL | logging.ERROR | logging.WARNING | logging.INFO | logging.DEBUG
def change_logging(level_log: loggingType = logging.INFO, formatter_log: str = formatter) -> None:
try:
old_factory = logging.getLogRecordFactory()
def record_factory(*args, **kwargs):
record = old_factory(*args, **kwargs)
record.uuid = logging_uuid.get("uuid")
if isinstance(record.msg, str):
record.msg = record.msg.replace("\\", "\\\\").replace("\n", "\\n")
return record
logging.setLogRecordFactory(record_factory)
except Exception as e:
print(f"change_logging exception:{e}, reset logging...")
formatter_log = formatter_without_uuid
logging.basicConfig(level=level_log, format=formatter_log, force=True)
def set_uuid_logging(func: Callable) -> Callable:
@wraps(func)
def wrapper(*args, **kwargs):
import uuid
current_uuid = f"{uuid.uuid4()}"
logging_uuid.set(current_uuid)
return func(*args, **kwargs)
return wrapper
|