Salesforce 日志结构(一)

在开发过程中经常需要调试程序,但SF中不像JAVA开发可以借助IDE通过断点调试,观察每个变量的赋值情况从而查找问题,

那就只能借助日志,分析排错,大部分情况下我们都是通过System.debug()输出语句输出变量,跟JS中 alert()一样。大部分都是只看日志的输出语句忽略日志的其他信息

最近发现SF的日志中可以看出每个变量的赋值情况,无需通过输出语句,这个跟设定的调试等级有关。在调试等级之前先学习下日志组成部分。

Debug Log包含的信息

SF 的debug log 可以记录 数据库的操作,系统执行过程,事务或者单元测试类执行中的错误信息

日志记录的信息可以是

  • Database changes

  • HTTP callouts

  • Apex errors

  • Resources used by Apex

  • Automated workflow processes, such as:

    • Workflow rules

    • Assignment rules

    • Approval processes

    • Validation rules

The debug log does not include information from actions triggered by time-based workflows.

Debug 设定

1. 在日志中可以监控某个用户,类,目前为止一般都是监控用户

2. 设置监控时间段,不能超过24h

3. 调试等级,不同的调试等级输出的日志信息不同。等级越低越详细

4. 日志中的限制:Org中日志最大为50M,超过后将覆盖最早的,每次日志输出最大为2M,超过的系统将会截断在输出的日志中会有个skip字样,这种情况下对我们调试不利。

日志整体结构

在sublime 中执行一段匿名代码块,在sublime中输出日志为列

#1 35.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;VALIDATION,INFO;WORKFLOW,INFO
#2 Execute Anonymous: Integer i = 0;
#3 Execute Anonymous: i++;
#4 Execute Anonymous: System.debug('i = '+i);
#5 22:34:06.58 (58323487)|EXECUTION_STARTED
#6 22:34:06.58 (58341923)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
#7 22:34:06.58 (59138044)|USER_DEBUG|[3]|DEBUG|i = 1
#8 22:34:06.59 (59206930)|CUMULATIVE_LIMIT_USAGE
#9 22:34:06.59 (59206930)|LIMIT_USAGE_FOR_NS|(default)|
#10   Number of SOQL queries: 0 out of 100
#11  Number of query rows: 0 out of 50000
#12  Number of SOSL queries: 0 out of 20
#13  Number of DML statements: 0 out of 150
#14  Number of DML rows: 0 out of 10000
#15  Maximum CPU time: 0 out of 10000
#16  Maximum heap size: 0 out of 6000000
#18  Number of callouts: 0 out of 100
#18  Number of Email Invocations: 0 out of 10
#19  Number of future calls: 0 out of 50
#20  Number of queueable jobs added to the queue: 0 out of 50
#21  Number of Mobile Apex push calls: 0 out of 10

#22 22:34:06.59 (59206930)|CUMULATIVE_LIMIT_USAGE_END

#23 22:34:06.58 (59295731)|CODE_UNIT_FINISHED|execute_anonymous_apex
#24 22:34:06.58 (60767656)|EXECUTION_FINISHED

 

 

#1 行中含义:35.0 表明使用的APEX版本

类别日志等级
APEX_CODEDEBUG
APEX_PROFILINGINFO
CALLOUTINFO
DBINFO
VALIDATIONINFO
WORKFLOWINFO

#2 ~ #4 忽略

#5 和 #24  (Execution Units) EXECUTION_STARTED 和 EXECUTION_FINISHED 为这次动作执行的起点和结束点,也应该可以理解为事务的开始到结束

由于SF中,每次处理一次请求为一个事务,不管这次请求执行了多少次触发器,执行了多少次数据库操作,Batch中,每个批次为一个事务(目前了解的这些)

#6 和 #23 (Code Units)CODE_UNIT_STARTED 和 CODE_UNIT_FINISHED 为一个代码单元的执行起点和结束点,比如:Trigger,webService方法,验证规则为一个Code Units

     A class is not a discrete unit of code(这句话应该表明一个普通的类不认为是一个Code Units 类最终是上层在调用)

     Code Units 是会出现嵌套的,比如当匿名代码块导致触发器时,这时触发器的Code Units是在 匿名代码块Code Units内

     

     同时还会表明是什么类型的Code Units 如:execute_anonymous_apex 、MyTrigger on Account trigger event BeforeInsert for [new]

    以下为部分Code Units

  • Triggers
  • Workflow invocations and time-based workflow
  • Validation rules
  • Approval processes
  • Apex lead convert
  • @future method invocations
  • Web service invocations
  • executeAnonymous calls
  • Visualforce property accesses on Apex controllers
  • Visualforce actions on Apex controllers
  • Execution of the batch Apex start and finish methods, and each execution of the execute method
  • Execution of the Apex System.Schedule execute method
  • Incoming email handling

#7 USER_DEBUG 为 用户输出日志(System.debug())      

#8 到 #22 行 则是记录 当前事务中各种限制的使用情况。每完成一个功能后,都需要检查该功能中限制使用情况,尽量把限制使用数降低。一但超过SF规定的限制系统直接出现运行时异常

Debug Event Type

15:51:01.071 (55856000)|DML_BEGIN|[5]|Op:Insert|Type:Invoice_Statement__c|Rows:1

以这条DML日志为列  日志采用 "|"为分隔符 

1) 第一段:时间 15:51:01.071 (55856000)

2)第二段:Event Name: DML_BEGIN  这里为DML开始

3) 第三段:代码行数 [5] 

4) 第四段:DML操作类型  这里为 insert

5)第五段:操作的对象 这里为:Invoice_Statement__c

6)第六段:成功的记录数:

通过日志了解程序执行情况,尤其是在正式环境后,当出现异常后,通过分析日志,先定位到某一方面的错误。SF中日志监控有2个地方,控制台中的日志(很少用,反应慢),日志界面,通过监控,点击查看,跳转到日志详细信息,另外IDE也能打印日志,比如执行匿名代码块,执行测试类。整体还是比较麻烦。(如有错误欢迎指出)

参考资料SF文档(https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_debugging.htm)

 

 

 

 

 

 

转载于:https://my.oschina.net/SpringZhang/blog/683496

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值