Не удается увидеть вывод system.debug в журналах при использовании пакетного кода apex

Я выполняю следующее в анонимном исполнении:

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

Класс ниже. Он использует пакетный интерфейс. Я вставил несколько отладочных операторов, но ничего не вижу в журналах консоли. Я также создаю журналы отладки на уровне отладки для Apex и т. Д., А также не вижу ничего из вывода system.debug. Сам SOQL, который я знаю, работает и должен возвращать только одну строку в данных тестовой среды разработчика, которые я настроил.

Есть ли что-то в пакетном интерфейсе, который не позволяет выводить 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 ответа

Быстрый и легкий взлом, который я иногда использую, состоял бы в том, чтобы установить уровни дебога на ERRORи затем каждый раз, когда вы хотите отладить, вы просто делаете
System.debug(LoggingLevel.ERROR, 'Debug message goes here');
Только не забудьте очистить строки отладки, когда закончите, чтобы не усугубить проблему в будущем.

Журналы отладки ограничиваются 2 МБ, если они превышают этот размер. Salesforce бесполезно удаляет строки отладки в попытке уменьшить размер до предела.

Если у вас особенно шумный класс, вы можете переопределить ведение журнала для этого класса.

Ознакомьтесь с документацией здесь: https://help.salesforce.com/articleView?id=code_setting_debug_log_levels.htm&type=0&language=en_US&release=206.20

Оказывается, в методе Execute я передавал List вместо List, тогда как запрос был против Opportunity.

Кроме того, похоже, что настройка LoggingLevel.INFO помогает, по крайней мере, получать отладочные сообщения, отправляемые на консоль разработчика при запуске этого пакетного класса в анонимном исполнении.

Спасибо за советы!

System.dubug поддерживается в пакетной версии. Поскольку пакетная вершина выполняется асинхронно, она создает несколько журналов в зависимости от размера вашего пакета. Итак, посмотрите на каждый файл журнала, который создается, когда вершина пакетной обработки завершает свое выполнение.

Другие вопросы по тегам