Debugging API Calls & Log Precedence

DEX455 - Apex 调试与异常处理完全指南

📄 第 432 页 🎬 视频课程

课程章节介绍

同学们,今天我们来聊聊在通过 API 调用 Salesforce 的时候,怎么精细地控制调试日志。 在 SOAP API 的请求里,我们可以传一个叫 ,DebuggingHeader, 的标头,它里面可以指定,日志类别,和,日志级别,。类别嘛,就是你想记录哪些方面的信息,比如数据库操作(DB)、工作流、验证规则等等,你可以按需勾选。级别则是从 ,NONE,(完全无日志)到 ,FINEST,(最详细)这个范围。 同时,对我们这些老手来说,以前的传统级别也照样能用,比如: - ,NONE,——不记录任何东西 - ,DEBUGONLY,——只记录调试信息 - ,DB,——记录和数据库相关的操作 - ,PROFILING,——用于性能分析 - ,CALLOUT,——记录外部接口调用的信息 - ,ALL,——什么都记下来 这些传统级别虽然简洁,但现在用类别加级别的方式会更灵活。 那么问题来了:如果我 API 里设了 DebuggingHeader,其他地方也有日志设置,到底听谁的?Salesforce 有一套非常明确的,优先级,规则,我给大家梳理一下: ,第一优先级:跟踪标志(TraceFlag), 这是最高的。如果你在开发者控制台、设置界面或通过工具 API,为某个用户或类开启了跟踪标志,它会直接覆盖所有其他的日志设置。也就是说,跟踪标志怎么说,最终日志就怎么生成。 ,第二优先级:测试执行时的默认级别, 如果没有设置任何跟踪标志,但你现在正在运行的是测试类(比如 `@isTest` 的单元测试),那么系统会应用一个默认的测试日志级别。所以就算没配标志,测试运行起来通常也能看到比较详尽的日志。 ,第三优先级:API 标头设置, 如果既没有跟踪标志,也不是在跑测试,那系统才会去看你通过 SOAP 头传过来的 ,DebuggingHeader,。你在这里设的类别和级别,会决定这次 API 调用生成多少日志。 ,第四优先级:入口点设置, 最后,还有一些入口点级别的设置,比如 Visualforce 页面上的 `debug` 请求参数:`?debug=1`。这种设置也可以生效,但它的优先级低于前面的几项。 ,最关键的细节,:如果以上任何一条都不适用——意味着没有 TraceFlag、不是测试、API 头部没设置、入口点也没要求——那么,系统就不会为本次操作生成或持久化任何日志,。你在日志列表里也就找不到它了。 大家记住这个优先级,以后排错的时候就能快速理解:为什么有日志、为什么没日志、到底谁说了算。今天的分享就到这里,有什么问题随时提出来。

关键词

Apex Salesforce Developer Guide