39 lines
850 B
Python
39 lines
850 B
Python
import logging
|
|
import os
|
|
from typing import Final
|
|
|
|
|
|
DEFAULT_LOG_LEVEL: Final[str] = "INFO"
|
|
DEFAULT_LOG_FORMAT: Final[str] = (
|
|
"%(asctime)s | %(levelname)s | %(name)s | %(message)s"
|
|
)
|
|
|
|
_configured = False
|
|
|
|
|
|
def _resolve_log_level() -> int:
|
|
level_name = os.getenv("LOG_LEVEL", DEFAULT_LOG_LEVEL).upper()
|
|
return getattr(logging, level_name, logging.INFO)
|
|
|
|
|
|
def setup_logging() -> None:
|
|
global _configured
|
|
|
|
if _configured:
|
|
return
|
|
|
|
root_logger = logging.getLogger()
|
|
root_logger.setLevel(_resolve_log_level())
|
|
|
|
if not root_logger.handlers:
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(logging.Formatter(DEFAULT_LOG_FORMAT))
|
|
root_logger.addHandler(handler)
|
|
|
|
_configured = True
|
|
|
|
|
|
def get_logger(name: str) -> logging.Logger:
|
|
setup_logging()
|
|
return logging.getLogger(name)
|