1

我为生产系统创建了一个可批处理的类。如果以下代码不起作用,则任何代码都不起作用。

该代码现在在生产系统中。它每天从一个站点获取每日汇率并创建 Currency__c 记录。如果它在汇率尚未公布时有效,则需要最后一天的汇率。但它不能按我想要的方式工作,我想在调试日志中对其进行测试。

当我查看调试日志时,从未调用过以下方法“ getXML(Date today) ”。因此System.debug('test: ' + result); 也从未调用过。

我怎样才能看到这个日志?

public String getXML(Date today){  
    counter += 1;       
    if(counter == 11) return '';
    try{
        Http h = new Http();
        HttpRequest req = new HttpRequest();       

        String m = today.month() + '';
        if((today.month()+'').length()==1) m = '0' + today.month();
        String d = today.day() + '';
        if((today.day()+'').length()==1) d = '0' + today.day();
        String donem = today.year() + '' + m;
        String formattedDate = d + '' + m + today.year();

        req.setEndpoint('http://www.tcmb.gov.tr/kurlar/' + donem + '/' + formattedDate + '.xml'); 
        req.setMethod('GET');            
        String result = '';
        if (!Test.isRunningTest()){
            HttpResponse res = h.send(req);
            result = res.getBody();
        }
        else {
            result += 'test';
        }         
        System.debug('test: ' + result);
        if(res.getStatusCode()==404){
            return getXML(today.addDays(-1));
        }   
        return result;
    }catch(Exception e){
        return getXML(today);
    }
}
4

2 回答 2

1

如果我理解您的问题,那就是“您有一些带有调试语句的代码。如果您自己运行此代码,您会看到这些语句。如果您将它作为更大测试的一部分运行,则不会出现调试语句;引导您认为这些行动没有发生”。

我遇到了类似的问题并在我的博客http://sforcehacks.blogspot.ca/2014/01/debug-statements-stopped-working-on.html上讨论了它

本质上,当跟踪文件的总大小变得太大时,Salesforce 似乎会放弃调试语句;即使是那些要在错误级别记录的。

在您的情况下,我不会依赖调试语句来跟踪批处理过程中发生的事情。而是在每次调用 getdate 方法时创建一个临时对象(表)并在其中存储一条记录。

于 2014-01-06T19:53:21.683 回答
0

如果您打开了开发人员控制台,它应该会捕获正在运行的批处理的日志。

或者,尝试按照Monitor Debug Logs下的步骤操作:

要查看保存的调试日志,请单击您的姓名 | 设置 | 监控 | 调试日志。

在此页面中,单击新建以指定您要为其保留调试日志的用户。

开始保留调试日志后,您可以:
* 单击查看以查看特定日志的详细信息。
* 单击下载以将调试日志下载为 XML 文件。

我发现让一些批处理作业在完成时发送一封带有 BatchableContext 状态的电子邮件很有帮助 - 请参阅在 Batch Apex 完成时发送通知

最后,您的异常处理可能会根据导致异常的原因创建递归循环。我想这就是要counter防范的。一种可能性是在代码到达预期的调试行之前发生异常。尝试在异常处理中放置一个调试行LoggingLevel.Error作为第一个参数。

如果由于日志变得太大而无法看到日志消息,请尝试降低日志级别并将重要的日志消息更改为 INFO 或 ERROR 级别。

例如

} catch(Exception e) {
    System.debug(LoggingLevel.Error, 'Exception:' + e);
    return getXML(today);
}
于 2013-03-02T05:53:28.303 回答