使用apex batchable代码时,无法在日志中看到system.debug输出

时间:2017-05-10 17:22:17

标签: salesforce apex-code apex

我在匿名执行中执行以下操作:

Database.executeBatch(new TransferACDCAccountOppOwnerBatch(), 200);

课程如下。它使用Batchable接口。我输入了一堆调试语句,但在控制台的日志中看不到任何内容。我还在调试级别为Apex等创建调试日志,也没有看到任何system.debug输出。我知道SOQL本身可以工作,并且应该只在我设置的开发人员沙箱测试数据中返回一行。

有什么关于batchable接口的东西不允许system.debug输出吗?我知道它是异步的,但是工作完成了,我看到了大量的日志信息。我只是没有看到任何system.debug输出。

global class TransferACDCAccountOppOwnerBatch implements Database.Batchable<sObject> {

    String query;

    static String type = 'Accountant';
    static String stageName = 'Closed Won';
    static String numberEmployees = '<5';

    global TransferACDCAccountOppOwnerBatch() {
        query = 'SELECT Id, Num_Active_Orgs__c, Num_Active_Paying_Orgs__c,Number_of_Bookkeeping_Clients__c, Number_Bookkeeping_Clients_SR__c,' +
                'Num_Targeted_Orgs__c, AccountId, Account_State__c, Biz_Dev_Owner__c,CloseDate, IsClosed, Name, Type, OPS_ID__c, Org_Creator__c,' +
                'Org_s_Geographical_State__c, OwnerId, StageName, Tier__c, IsWon,First_targeted_Org__r.NumberEmployees__c, Account.name, Account.owner.name' +
                ' FROM Opportunity' +
                ' WHERE StageName = :stageName' +
                ' And type = :type' +
                ' And CloseDate < Last_90_Days' +
                ' And First_targeted_Org__r.NumberEmployees__c = :numberEmployees'; 
    }

    global Database.QueryLocator start(Database.BatchableContext BC) {
        System.debug('start query');
        return Database.getQueryLocator(query);
    }

    global void execute(Database.BatchableContext BC, List<Account> scope) {
        System.debug('execute batch transfer');
        TransferACDCAccountOppOwnerHandler hierarchy_handler = new TransferACDCAccountOppOwnerHandler();
        hierarchy_handler.setup(scope, BC.getJobId());
        System.debug('after hierarchy handler setup');
        // hierarchy_handler.runMatching();
        // hierarchy_handler.processConsoles();
        // hierarchy_handler.processGlobalConsoles();
        // hierarchy_handler.commitUpdates();

    }

    global void finish(Database.BatchableContext BC) {
        System.debug('finish bath');
    }
}

4 个答案:

答案 0 :(得分:0)

调试日志限制为2MB(如果超过该大小)salesforce无助删除调试行以尝试将大小减小到限制以下。

如果您有一个特别嘈杂的课程,您可以覆盖该课程的日志记录。

点击此处的文档:https://help.salesforce.com/articleView?id=code_setting_debug_log_levels.htm&type=0&language=en_US&release=206.20

答案 1 :(得分:0)

我有时会使用快速简单的黑客将你的debog级别设置为ERROR,然后每次你想要调试你就行了 System.debug(LoggingLevel.ERROR, 'Debug message goes here');
只要不要忘记在完成后清除调试行,以免使问题更加严重。

答案 2 :(得分:0)

事实证明,在Execute方法中,当查询针对Opportunity时,我传递的是List而不是List。

此外,似乎设置LoggingLevel.INFO至少有助于在匿名执行中运行此batchable类时获取发送到开发人员控制台的调试消息。

感谢您的提示!

答案 3 :(得分:0)

批处理顶点支持 System.dubug。 由于批处理 apex 异步运行,因此它会根据您的批处理大小创建多个日志。因此,请查看批处理 apex 完成执行时创建的每个日志文件。