2023-02-13 17:21:37 +01:00

61 lines
1.3 KiB
Python

import sys
from functools import wraps
from operator import attrgetter
from typing import Callable, Any
import loguru
from funcy import log_calls
dev_logger = loguru.logger
dev_logger.remove()
dev_logger.add(
sink=sys.stderr,
format="<green>{time:YYYY-MM-DD at HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>: <level>{message}</level>",
level="TRACE",
)
prod_logger = loguru.logger
prod_logger.add(
sink=sys.stderr,
format="<white>{time:YYYY-MM-DD at HH:mm:ss}</white> | <level>{level: <8}</level> | <cyan>{name}</cyan>: <level>{message}</level>",
level="INFO",
enqueue=True,
)
logger = loguru.logger
def __log(logger, level: str) -> Callable:
print_func = get_print_func(logger, level)
def inner(func: Callable) -> Callable:
@log_calls(print_func=print_func)
@wraps(func)
def inner(*args, **kwargs) -> Any:
return func(*args, **kwargs)
return inner
return inner
def get_print_func(logger, level: str):
return attrgetter(level.lower())(logger)
def dev_log(level: str = "TRACE") -> Callable:
return __log(dev_logger, level)
def prod_log(level: str = "TRACE") -> Callable:
return __log(prod_logger, level)
def delay(fn, *args, **kwargs):
def inner():
return fn(*args, **kwargs)
return inner