Logging Utilities
Code Properties
- Language: Python
- Modules:
logging,pydantic
Overview
Utility functions for setting up Python logging with configurable settings and consistent formatting.
Code
Logger Utility
"""Logging Utilities"""
import logging
from typing import Optional
from settings import Settings
def get_logger(settings: Optional[Settings] = None) -> logging.Logger:
"""Get configured Logger instance.
Args:
settings: Optional Settings object with log_level
Returns:
Configured Logger instance
"""
logger = logging.getLogger("<project>")
logger.setLevel(settings.log_level if settings else "INFO")
# clear existing handlers
for handler in logger.handlers[:]:
logger.removeHandler(handler)
handler = logging.StreamHandler()
handler.setLevel(settings.log_level if settings else "INFO")
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)
return loggerSettings Configuration
"""Settings Configuration"""
import typing
from functools import lru_cache
from pydantic_yaml import YamlModel
class Settings(YamlModel):
api_key: typing.Optional[str] = None
log_level: str = "INFO"
@lru_cache()
def get_settings_from_file(path: str = "config.yml") -> Settings:
"""Load settings from YAML file with caching."""
settings = Settings.parse_file(path)
return settingsUsage
from logging_utils import get_logger
from settings import get_settings_from_file
# get settings and logger
settings = get_settings_from_file("config.yml")
logger = get_logger(settings)
# use the logger
logger.info("Application started")
logger.warning("This is a warning")
logger.error("An error occurred")Appendix
Note created on 2024-04-15 and last modified on 2024-12-31.
See Also
Backlinks
(c) No Clocks, LLC | 2024