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

Azure Function日志同时发送至Azure Monitor与App Insights问题求助

问题分析

你当前的代码仅配置了App Insights的日志处理器,未添加Azure Monitor(如Log Analytics工作区)对应的处理器,因此日志只会发送到App Insights。另外代码中存在Logger实例管理混乱的问题(全局Logger和类内重复调用getLogger),也可能导致配置不生效。

解决方案

要同时发送日志到App Insights和Azure Monitor(Log Analytics),需要为Logger添加两个独立的AzureLogHandler实例,分别对应两个服务的连接字符串。以下是修正后的代码:

import logging
import socket
from opencensus.ext.azure.log_exporter import AzureLogHandler

# 全局Logger实例,统一使用该实例避免混乱
logger = logging.getLogger(socket.gethostname())
logger.propagate = False  # 防止日志被根Logger重复处理

class LoggerConfig:
    @staticmethod
    def configure(debug_mode, app_insights_conn_str, log_analytics_conn_str):
        # 清除已有处理器,避免重复添加
        logger.handlers.clear()
        
        # 定义统一的日志格式
        formatter = logging.Formatter(
            '%(asctime)s : %(hostname)s : %(levelname)s : %(message)s',
            defaults={'hostname': socket.gethostname()}
        )
        
        # 添加App Insights处理器
        ai_handler = AzureLogHandler(connection_string=app_insights_conn_str)
        ai_handler.setFormatter(formatter)
        logger.addHandler(ai_handler)
        
        # 添加Azure Monitor(Log Analytics)处理器
        la_handler = AzureLogHandler(connection_string=log_analytics_conn_str)
        la_handler.setFormatter(formatter)
        logger.addHandler(la_handler)
        
        # 设置日志级别
        if debug_mode.lower() == 'true':
            logger.setLevel(logging.DEBUG)
        else:
            logger.setLevel(logging.INFO)

class Log:
    @staticmethod
    def info(msg):
        logger.info(msg)
    
    @staticmethod
    def debug(msg):
        logger.debug(msg)
    
    @staticmethod
    def warning(msg):
        logger.warning(msg)
    
    @staticmethod
    def critical(msg):
        logger.critical(msg)
使用方式

在Azure Function中导入并配置:

import os
from your_log_module import LoggerConfig, Log

# 从环境变量获取两个服务的连接字符串
LoggerConfig.configure(
    debug_mode=os.environ["debugMode"],
    app_insights_conn_str=os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"],
    log_analytics_conn_str=os.environ["LOG_ANALYTICS_CONNECTION_STRING"]
)

# 日志调用示例
Log.info("测试日志:同时发送到App Insights和Azure Monitor")
Log.debug("调试日志:仅在debug模式下发送")
关键说明
  • 连接字符串配置:
    • App Insights的连接字符串可在对应资源的「概述」页面获取。
    • Log Analytics的连接字符串格式为:InstrumentationKey=<工作区ID>;IngestionEndpoint=https://<区域>.ods.opinsights.azure.com/;LiveEndpoint=https://<区域>.olp.opinsights.azure.com/,工作区ID和密钥可在Log Analytics工作区的「代理管理」页面获取。
  • Logger实例管理:统一使用全局Logger实例,避免重复创建;设置propagate=False防止日志被根Logger重复处理。
  • 静态方法修正:将类方法改为静态方法,避免实例化问题,确保日志调用逻辑清晰。

内容的提问来源于stack exchange,提问作者Valves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:52:31