Logging Utilites Python Code title: Contents style: nestedList # TOC style (nestedList|inlineFirstLevel) minLevel: 1 # Include headings from the specified level maxLevel: 4 # Include headings up to the specified level includeLinks: true # Make headings clickable debugInConsole: false # Print debug info in Obsidian console Overview Sources: ** Code src/utils/logging_utils.py: """Logging Utilities""" import logging from typing import Optional from settings import Settings def get_logger(settings: Optional[Settings] = None) -> Logger: """Get Logger :param: settings: (Optional) :result: Logger """ logger = logging.getLogger("<project>") logger.setLevel(settings.log_level if settings else "INFO") # Clear the 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 logger where src/settings.py is: import typing import os from enum import Enum from functools import lru_cache from pydantic_yaml import YamlModel class Settings(YamlModel): api_key: typing.Optional[str] = None my_other_setting: typing.Optional[str] = None @lru_cache() def get_settings_from_file(path: str = "config.yml") -> Settings: """Get Settings From File :param: path: (String) Defaults to 'config.yml' :returns: Settings Object """ settings = Settings.parse_file(path) return settings Details About This note is about … See Also Python Map of Content Python Code Tool - Python Tool - Python Flask Appendix Note created on 2024-04-15 and last modified on 2024-04-15. Backlinks LIST FROM [[Python - Logging Utilites]] AND -"CHANGELOG" AND -"04-RESOURCES/Code/Python/Python - Logging Utilites" (c) No Clocks, LLC | 2024