如何在Azure Durable Functions(TypeScript)中记录错误堆栈跟踪?
解决Azure Durable Functions(TypeScript)异常无TypeScript堆栈跟踪问题
针对你遇到的Durable Functions(TypeScript)异常时无法获取TS堆栈跟踪的问题,可通过以下步骤解决:
修正TypeScript编译配置
确保tsconfig.json中启用内联源映射和内联源码,Azure Functions运行时需要内联的源信息才能关联TS代码与JS执行堆栈:{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "inlineSourceMap": true, "inlineSources": true, // 保留其他原有配置 } }注意:默认的Azure Functions TypeScript模板不会自动开启这两个选项,必须手动添加。
配置Node.js运行时启用源映射解析
在本地开发的local.settings.json或生产环境的函数应用应用设置中添加以下配置:NODE_OPTIONS = --enable-source-maps:让Node.js在抛出异常时自动解析内联源映射,生成TS格式的堆栈跟踪- 确保
WEBSITE_NODE_DEFAULT_VERSION设置为18.x或20.x等较新版本,旧Node.js版本对源映射的支持不完善
统一异常处理,避免重复try-catch
无需在每个触发器/处理器外手动包裹try-catch,可创建一个通用的异常包装函数,统一处理日志记录并保留TS堆栈:export const withErrorLogging = <T extends (...args: any[]) => Promise<any>>(func: T) => { return async (...args: Parameters<T>) => { try { return await func(...args); } catch (error) { const context = args[0]; // 用context.log.error记录,日志会自动传入Application Insights并携带TS堆栈 context.log.error('Execution failed', error); // 重新抛出异常,保证Durable Functions的失败编排逻辑正常执行 throw error; } }; };使用时直接包裹你的编排/活动/触发器函数:
export const myOrchestrator = withErrorLogging(function*(context: OrchestrationContext) { // 你的编排逻辑 });调整Application Insights日志配置
在host.json中确保日志级别足够详细,让错误日志完整输出:{ "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } }, "logLevel": { "Function": "Error", "default": "Error" } } }配置后,Application Insights中就能看到包含TypeScript文件路径和行号的堆栈跟踪,而非仅.NET框架的堆栈信息。
内容的提问来源于stack exchange,提问作者Almund
相关产品推荐
相关产品推荐

