My Default Logging Setup for Python Apps
(, en)
import os
import logging
from functools import cached_property
from dotenv import load_dotenv
from logging import getLogger # noqa: F401
load_dotenv()
logger = getLogger(__name__)
class LoggingHandler:
@cached_property
def logger(self):
return logging.getLogger(f"{self.__module__}.{self.__class__.__name__}")
def _get_log_level():
loglevel = os.environ.get("LOG_LEVEL", "INFO")
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
raise ValueError("Invalid log level: %s" % loglevel)
return numeric_level
def init_logging_system():
log_dtfmt = "%Y-%m-%d %H:%M:%S"
log_fmt = "%(asctime)s %(levelname)-5s %(name)s.%(funcName)s: %(message)s"
log_level = _get_log_level()
logging.addLevelName(logging.WARNING, "WARN")
logging.basicConfig(level=log_level, format=log_fmt, datefmt=log_dtfmt)
logger.info("logging system initiated")
init_logging_system()