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

如何阻止Microsoft Graph Client打印用户头像获取的404错误日志

解决Microsoft Graph Client获取用户头像时的404日志干扰问题

方案一:自定义日志过滤,屏蔽404错误日志

Microsoft Graph Client支持自定义日志处理器,你可以通过配置自定义Logger过滤掉404相关的错误日志,只保留真正需要关注的异常日志。

代码示例

import { Client, Logger, LogLevel } from "@microsoft/microsoft-graph-client";

// 自定义日志处理器:过滤404错误日志
const customLogger = new Logger((logLevel, message, containsPii) => {
  // 仅当日志不包含404时才输出
  if (!message.includes("404")) {
    switch (logLevel) {
      case LogLevel.Error:
        console.error(message);
        break;
      case LogLevel.Warning:
        console.warn(message);
        break;
      default:
        console.log(message);
    }
  }
});

// 初始化Graph Client时传入自定义Logger
const client = Client.initWithMiddleware({
  authProvider: yourAuthProvider, // 替换为你的认证提供者
  logger: customLogger,
  logLevel: LogLevel.Error // 仅输出错误级别的日志,按需调整
});

方案二:提前检查用户是否存在头像

在获取头像二进制数据前,先请求头像的元数据接口,判断用户是否有头像存在,从源头避免触发404错误。

代码示例

async function fetchUserAvatar(client: Client, userId: string): Promise<Blob | null> {
  try {
    // 先调用头像元数据接口,检查是否存在头像
    await client.api(`/users/${userId}/photo`).get();
    // 存在则获取头像二进制数据
    return await client.api(`/users/${userId}/photo/$value`).get();
  } catch (error: any) {
    // 仅忽略404(无头像)的情况,其他错误正常抛出或记录
    if (error.statusCode === 404) {
      return null;
    }
    throw error;
  }
}

// 使用示例
const avatarBlob = await fetchUserAvatar(this.client, userId);
if (avatarBlob) {
  // 处理有头像的情况
} else {
  // 处理无头像的情况
}

补充优化:精准捕获404错误

如果你不想提前检查,也可以在原代码中精准捕获404错误,只忽略该情况,同时配合自定义日志过滤减少无效日志:

const photoData: Blob | null = await this.client.api(fetchUrl)
  .get()
  .catch((error: any) => {
    // 仅忽略404错误,其他错误正常抛出
    if (error.statusCode !== 404) {
      throw error;
    }
    return null;
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:57:29