You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI集成Azure OpenTelemetry日志器时日志级别映射错误问题

FastAPI集成Azure OpenTelemetry日志器时日志级别映射错误问题

我的FastAPI应用日志目前会写入Azure Log Analytics的AppServiceConsoleLogs表中。我通过以下类形式的配置初始化日志器(LOGGING_CONFIG是一个日志配置类):

class ApiLoggerConfig(BaseModel):
    """Logging configuration to be set for all APIs."""

    formatters: dict = {
        "uvicorn": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(levelprefix)s %(asctime)s  %(name)s:%(lineno)d: %(message)s",
            "datefmt": DATEFMT,
        },
        "access": {
            "()": "uvicorn.logging.AccessFormatter",
            "fmt": '%(levelprefix)s %(asctime)s  %(name)s: %(client_addr)s - "%(request_line)s" %(status_code)s',
            "datefmt": DATEFMT,
        },
    }

    handlers: dict = {
        "uvicorn": {
            "formatter": "uvicorn",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stderr",
        },
        "access": {
            "formatter": "access",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stdout",
        },
    }

    loggers: dict = {
        "uvicorn": {"handlers": ["uvicorn"], "level": LOG_LEVEL, "propagate": False},
        "uvicorn.error": {"level": LOG_LEVEL},
        "uvicorn.access": {
            "handlers": ["access"],
            "level": LOG_LEVEL,
            "propagate": False,
        },
    }
    def add_logger(
        self,
        name: str,
        handler: str = "default",
        propagate: bool = False,
    ):

        self.loggers[name] = {
            "handlers": [handler],
            "level": self.LOG_LEVEL,
            "propagate": propagate,
        }


def _setup_logging(app: FastAPI):
    LOGGING_CONFIG = ApiLoggerConfig()
    # Load Azure logging config for cloud setup only
    if os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING"):
        from azure.monitor.opentelemetry import configure_azure_monitor
        from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor

        # set metrics extractor to root
        configure_azure_monitor()
        FastAPIInstrumentor.instrument_app(app)
    LOGGING_CONFIG.add_logger(__name__)
    dictConfig(LOGGING_CONFIG)
    return logging.getLogger(__name__)


app = FastAPI()

logger = _setup_logging(app)

@app.get("/", response_model=HealthResponse)
async def health() -> Dict[str, str]:
    """Simple heath check endpoint.

    Returns:
        The response follows the provided HealthResponse schema.
    """
    logger.info("I am healthy")
    return {"message": "API running."}

但现在遇到了一个奇怪的问题:所有属于__name__日志器的INFO级别日志,在Log Analytics里都被错误地标记为ERROR级别。这个配置在本地运行时完全正常,没有任何问题。

Log Analytics中日志级别错误映射的截图

请问我哪里配置出错了?

备注:内容来源于stack exchange,提问作者Bennimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:03:10