如何阻止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
相关产品推荐
相关产品推荐

