import logging from typing import Any, Dict, Tuple from audience_common.logger.constants import RESERVED_FIELDS def get_extra_fields( record: logging.LogRecord, reserved: Tuple[str, ...] = RESERVED_FIELDS ) -> Dict[str, Any]: easy_types = (str, bool, dict, float, int, list, type(None)) fields = {} for key, value in record.__dict__.items(): if key not in reserved: if isinstance(value, easy_types): fields[key] = value else: fields[key] = repr(value) return fields def get_status_code_log_level(status_code: int) -> int: level = logging.INFO if 299 < status_code < 499: level = logging.WARNING elif 499 < status_code: level = logging.ERROR return level