Source code for projectreport.logger
import logging
from enum import Enum
from pydantic import BaseSettings, validator
from rich.logging import RichHandler
[docs]class LogLevel(str, Enum):
INFO = "INFO"
DEBUG = "DEBUG"
[docs]class LoggingConfig(BaseSettings):
level: LogLevel = LogLevel.INFO
[docs] class Config:
env_prefix = "PROJECT_REPORT_LOG_"
@validator("level", pre=True)
def cast_log_level(cls, v):
if isinstance(v, LogLevel):
return v
level = str(v).casefold().strip()
if level == "info":
return LogLevel.INFO
elif level == "debug":
return LogLevel.DEBUG
raise ValueError(f"invalid log level {level}")
[docs]def create_logger() -> logging.Logger:
logger = logging.getLogger("project-report")
logger.setLevel(LOGGING_CONFIG.level.value)
logger.addHandler(RichHandler(rich_tracebacks=True))
return logger
LOGGING_CONFIG = LoggingConfig()
logger = create_logger()
if __name__ == "__main__":
logger.info("info level")
logger.debug("debug level")
try:
raise ValueError("exception")
except ValueError as e:
logger.exception(e)