Код IT
← Каталог

Логирование, мониторинг и наблюдаемость систем — Стратегии контроля объёма

Фрагмент из «Логирование, мониторинг и наблюдаемость систем»: Стратегии контроля объёма.

python infra-securityencyclopedia8-04-devops-ci-cd-19 embed URL статья в энциклопедии
Python main.py
from fastapi import FastAPI, HTTPException
from typing import Dict

import logging

app = FastAPI()
logger_registry: Dict[str, logging.Logger] = {}

@app.get("/admin/logging/levels")
async def get_logging_levels():
    """Получение текущих уровней всех логгеров."""
    return {
        name: logging.getLevelName(logger.level)
        for name, logger in logger_registry.items()
    }

@app.put("/admin/logging/levels/{logger_name}")
async def set_logging_level(logger_name: str, level: str):
    """Изменение уровня логирования без перезапуска."""
    target_logger = logging.getLogger(logger_name)
    
    numeric_level = getattr(logging, level.upper(), None)
    if numeric_level is None:
        raise HTTPException(400, f"Некорректный уровень: {level}")
    
    old_level = logging.getLevelName(target_logger.level)
    target_logger.setLevel(numeric_level)
    
    logger_registry[logger_name] = target_logger
    
    return {
        "logger": logger_name,
        "old_level": old_level,
        "new_level": level
    }
from fastapi import FastAPI, HTTPException
from typing import Dict

import logging

app = FastAPI()
logger_registry: Dict[str, logging.Logger] = {}

@app.get("/admin/logging/levels")
async def get_logging_levels():
    """Получение текущих уровней всех логгеров."""
    return {
        name: logging.getLevelName(logger.level)
        for name, logger in logger_registry.items()
    }

@app.put("/admin/logging/levels/{logger_name}")
async def set_logging_level(logger_name: str, level: str):
    """Изменение уровня логирования без перезапуска."""
    target_logger = logging.getLogger(logger_name)
    
    numeric_level = getattr(logging, level.upper(), None)
    if numeric_level is None:
        raise HTTPException(400, f"Некорректный уровень: {level}")
    
    old_level = logging.getLevelName(target_logger.level)
    target_logger.setLevel(numeric_level)
    
    logger_registry[logger_name] = target_logger
    
    return {
        "logger": logger_name,
        "old_level": old_level,
        "new_level": level
    }