2013-03-01 49 views
1

我已經爲生產系統創建了可批量處理的類。如果以下代碼無效,則任何代碼都不起作用。爲什麼不查看由Salesforce中的System.debug()方法生成的調試行?

該代碼現在位於生產系統中。它每天從一個網站獲得每日匯率並創建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); 
    } 
} 

回答

0

如果您打開了開發者控制檯,它應該捕獲正在運行的批處理的日誌。

或者,嘗試以下Monitor Debug Logs下的步驟:

要查看保存的調試日誌,點擊您的姓名|設置|監測|調試 日誌。

在此頁面中,單擊新建指定要保留調試日誌的用戶。

開始保留調試日誌後,您可以:
*單擊查看以查看特定日誌的詳細信息。
*單擊「下載」將調試日誌下載爲XML文件。

我發現它有一些批量作業發送電子郵件有幫助有BatchableContext狀態完成 - 請參閱Sending a notification when Batch Apex completes

最後,您的異常處理可能會創建一個遞歸循環,具體取決於導致異常的原因。我想這就是counter所防範的。一種可能性是在代碼到達預期的調試行之前發生異常。嘗試將第一個參數LoggingLevel.Error作爲異常處理中的調試行。

如果由於日誌變得太大而無法看到日誌消息,請嘗試降低日誌級別並將重要日誌消息更改爲INFO或ERROR級別。

E.g.

} catch(Exception e) { 
    System.debug(LoggingLevel.Error, 'Exception:' + e); 
    return getXML(today); 
} 
+0

我知道的方式,但調試日誌太大。它的大小是2,451,489字節。可能它的一些被截斷了,所以我不全是它們。 – mustafatop 2013-03-06 14:22:07

+0

除了類的詳細信息頁面中的「頂點代碼」 - >「日誌過濾器」之外,所有日誌過濾器均被選爲「無」。當我通過visualforce頁面調用該類時,會很好地創建日誌。但是當我安排它時,日誌不會被創建。你能幫我嗎? – mustafatop 2013-03-06 16:00:37

+0

@mustafatop嘗試增加重要行上的LoggingLevel,然後相應地設置頂點代碼日誌過濾器。如果您使用Info,warn或Error,這應該大大減少日誌大小。 – 2013-03-06 21:32:36

1

如果我明白你的問題正是這種「你有一些代碼與它調試語句。如果你本身運行這段代碼,你看到這些語句。如果你運行它作爲一個較大的測試調試的一部分陳述沒有出現,導致你認爲行動沒有發生「。

我打了一個類似的問題,談論它在我的博客http://sforcehacks.blogspot.ca/2014/01/debug-statements-stopped-working-on.html

從本質上講,當跟蹤文件的總大小變得過大,那麼Salesforce的似乎降調試語句;即使那些要在錯誤級別上記錄的。

在你的情況下,我不會依賴調試語句來跟蹤批處理過程中發生的情況。相反,創建一個臨時對象(表)並在每次調用getdate方法時在其中存儲一條記錄。

相關問題