Skip to main content

生成和分析日志

学习目标

完成本单元后,您将能够:
  • 在日志检查器或文本编辑器中查看调试日志。
  • 为调试日志设置各种日志级别。
  • 使用日志检查器管理和切换视角。
备注

备注

用中文(简体)学习?在中文(简体)Trailhead Playground 中开始挑战,用括号中提供的译文完成挑战。仅复制并粘贴英文值,因为挑战验证基于英文数据。如果在中文(简体)组织中没有成功通过挑战,我们建议您 (1) 将区域设置切换为美国,(2) 按此处说明将语言切换为英文,(3) 再次单击“检查挑战”按钮。

查看 Trailhead 本地化语言徽章详细了解如何利用 Trailhead 译文。

查看调试日志

作为一名优秀的指挥官,您会查看系统日志,以检查系统运行是否一切正常。日志是检查系统或程序问题的最佳工具之一。使用 Developer Console,您可以查看各种调试日志,以了解代码的工作方式并识别任何性能问题。

在文本编辑器中查看日志

查看调试日志很简单。要生成日志,让我们来执行之前创建的 EmailMissionSpecialist Apex 类。

您可以通过两种方式查看日志。
  • 在执行之前,在“输入 Apex 代码”窗口中启用打开日志。执行代码后日志将会打开。
  • 执行后,双击出现在“日志”选项卡中的日志。
让我们来尝试第一种方式。
  1. 选择调试 | 打开执行匿名窗口
  2. “输入 Apex 代码”窗口将显示最近一次为执行而输入的代码。如果与以下代码不同,则将其删除并粘贴以下代码。请务必将输入您的电子邮件地址替换为自己的电子邮件地址。
    EmailMissionSpecialist em = new EmailMissionSpecialist();
    em.sendMail('Enter your email address', 'Flight Path Change', 
       'Mission Control 123: Your flight path has been changed to avoid collision '
       + 'with asteroid 2014 QO441.');
  3. 选择打开日志选项。
  4. 单击执行

您看到的执行日志可能看起来就像是一堆令人费解的数字和单词,所以让我们来谈谈如何阅读和理解日志数据。

日志结果

解读日志数据

我们来再次运行 EmailMissionSpecialist 类,但这次我们引入一个错误。然后,我们在“日志”选项卡中找到生成的日志。

  1. 选择调试 | 打开执行匿名窗口。提供一个无效的电子邮件地址,例如 testingemail
    EmailMissionSpecialist em = new EmailMissionSpecialist();
    em.sendMail('testingemail', 'Flight Path Change', 
       'Mission Control 123: Your flight path has been changed to avoid collision '
       + 'with asteroid 2014 QO441.');
  2. 取消选择打开日志选项。
  3. 单击 Execute(执行)。运行代码后,您会看到一个包含错误的对话框。执行匿名错误
  4. 单击确定,然后双击“日志”选项卡中的新日志。如果无法确定哪个日志是最新的,单击“时间”列的标题,按生成时间对日志进行排序。日志结果
您可以通过识别每列代表的内容来解读调试日志。
  • 时间戳 - 事件发生的时间。时间戳始终使用用户所在的时区,并采用 HH:mm:ss:SSS 格式。
  • 事件 - 触发调试日志条目的事件。例如,在您生成的执行日志中,当确定电子邮件地址无效时,将记录 FATAL_ERROR 事件。
  • 详细信息 - 详细列出有关代码行和代码执行方法名称的详细信息。
日志结果查看选项

您可以通过选择此框架 (a)、可执行 (b) 或仅调试 (c) 来更改您在执行日志中看到的内容。选择这些选项后,仅会显示某些类型的事件。例如,“仅调试”将显示 USER_DEBUG 事件。您还可以使用筛选器 (d) 对日志的不同部分进行筛选。输入方法名称或任何其他您专门查找的文本,日志将对您的结果进行筛选。

您还可以将调试日志作为原始日志查看,以显示更多信息。选择文件 | 打开原始日志。原始日志中的时间戳将显示事件开始后经过的时间(以纳秒为单位,在括号中)。

日志中的时间戳、事件和详细信息

时间戳、事件和详细信息的这种组合可提供有关代码工作状态和所发生错误的有效分析结果。

尽管所有这些信息都很棒,但如果您想在调试日志中快速查找某些值怎么办?毕竟,作为指挥官,您还有许多其他职责。解决这一问题的一个很好的方法是使用 Apex 中的 System.debug() 方法。

System.debug() 的优点在于您可以将其添加到代码中的任何位置,以便对变量进行跟踪,从而帮助您调试自己的代码。

这是 System.debug() 的语法。要显示一条消息:
System.debug('Your Message');
要显示一个变量的值:
System.debug(yourVariable);
要显示一个标记的值:
System.debug('Your Label: ' + yourVariable);

使用日志检查器

方便的日志检查器可以更轻松查看大型日志!日志检查器可以使用日志面板视图来提供代码的不同视角。选择调试 | 查看日志面板来进行查看。

备注

调试 | 查看日志面板菜单选项只有在您查看调试日志选项卡时才可用。如果(举例来说)您查看的是原始日志选项卡,则该选项将变为灰色。

日志面板可以更改日志的结构,以提供执行中代码的其他有用上下文信息。例如,不同的面板可显示源、执行时间、堆大小和调用层次结构。(我们知道,专业地说,这部分内容的技术性相对较强。请记住,我们正在了解 Developer Console,而不是调试的细节。因此,如果有任何内容对您来说意义不明,也不必太担心。)

这些日志面板可以相互交互,以帮助您调试自己的代码。例如,当您单击“执行日志”或“堆栈树”中的日志条目时,其他面板(源、源列表、变量和执行堆栈)会刷新,以显示相关信息。

所有日志面板
我们可以在日志检查器中使用这些面板。
  1. 堆栈树 - 使用自上而下的树视图显示对象层次结构中的日志条目及其执行。例如,如果一个类调用第二个类,则第二个类就会显示为第一个类的子类。
  2. 执行堆栈 - 显示所选项目自下而上的视图。它会显示日志条目,之后显示调用它的操作。
  3. 执行日志 - 显示代码执行期间发生的每个操作。
  4. - 显示源文件的内容,指示生成所选日志条目时运行的代码行。
  5. 源列表 - 显示将事件记录至日志时执行的代码的上下文。例如,如果您选择在输入错误电子邮件地址值时生成的日志条目,则“源列表”将显示 execute_anonymous_apex。
  6. 变量 - 显示运行生成所选日志条目的代码时在范围内的变量以及为其分配的值。
  7. 执行概览 - 显示正在执行的代码的统计信息,包括执行时间和堆大小。

什么是视角管理器,如何切换视角?

视角是分组面板的布局。例如,预定义的“调试”视角将显示执行日志、源和变量,而“分析”视角则会显示堆栈树、执行日志、执行堆栈和执行概览。

您可以通过选择调试 | 切换视角调试 | 视角管理器来选择一个视角。是的,这就像在不同的通信面板之间切换一样简单,而且比试图在同一视图中解读来自任务专家、地球空间站和火星任务控制中心的日志要容易得多。

您还可以创建自己的视角。配置要显示的首选面板组合,然后选择调试 | 将视角另存为。为视角输入一个名称,然后单击确定

操作日志数据,找到需要的信息

您知道 3 号引擎有时会出现运行不平稳的问题。您进行转舵,以便避开小行星 2014 QO441 时,让该引擎满负荷运转至关重要。但是,每次尝试进行系统检查时,您还会从飞船中一个性能下降的机器人那里获得信息。它会发送预测机器人同时出现故障的乱码报告,增加日志中的行数,并可能使您错过有价值的信息。

您需要一种方法来控制日志记录的信息量。幸运的是,Developer Console 可以在日志类别和日志级别的帮助下做到这一点。

日志类别

日志类别是待记录信息的类型。

以下是两种常见的日志类别。
  • ApexCode,它可以将与 Apex 代码相关的事件记录在日志中,还会包括 Apex 方法开始和结束的相关信息。
  • 数据库,它会包括与数据库事件相关的日志,包括数据库操作语言 (DML)、SOSL 和 SOQL 查询(我们稍后会介绍)。

日志级别及其更改方法

看起来,3 号引擎又出问题了。当您查看日志,以查看可能导致这些问题的原因时,您会看到有关性能下降的机器人同时出现故障的警告消息。

一个机器人不会引起大的事故,所以您不必对警告过于担心。但有故障的引擎的确是一个紧迫的问题。如果您无法跟踪隐藏在所有日志数据中的来自 3 号引擎的实际消息怎么办?日志级别就可以派上用场!

日志级别可以控制为每个日志类别记录的详细信息量。Developer Console 中可以提供以下级别,从最少的数据记录量(级别 = NONE)到最多(级别 = FINEST)。
  • NONE
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • FINE
  • FINER
  • FINEST

日志级别会累积。例如,如果事件的日志级别为 INFO,则还将包括 ERRORWARN 级别的日志信息。但如果您的日志级别为 ERROR,那么您只会收到错误消息。您不会收到该日志类别的警告消息或任何其他日志信息。

日志级别提供的信息还取决于日志事件。不同的日志事件会在特定的日志级别开始记录。例如,一些 ApexCode 事件会在 INFO 开始记录。如果将日志级别设置为 ERROR,则不会获得这些事件的任何日志信息。

要获得所查找的信息,请修改不同事件的日志级别。当机器人将可能出现大的故障的消息保存到数据库时,您需要控制这部分的日志记录。因此,将数据库 (DB) 类别的日志级别设置为 NONEERROR

您可以通过选择调试 | 更改日志级别来设置这些级别。

选择日志级别

在“通用跟踪设置”选项卡上,单击添加/更改 (1)。在“更改调试级别”窗口中,为每个类别选择日志级别。请注意,使用日志级别时要考虑清楚。如果日志级别为 FINEST (2),代码可能会达到日志上限并需要更长时间才能运行。如果您在更新类别的日志级别时没有看到所有级别,不要担心。只有可以添加更多日志记录的级别会被列出。

幸运的是,一旦禁用了机器人警告日志记录,您可以很容易识别 3 号引擎的问题:冷却液液位过低。您可以派遣工程师去添加更多冷却剂。进行相关操作时,您会让工程师为机器人的关节上油。希望新鲜的润滑剂会让机器人的性能有所提升。

在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈