2012-04-10 165 views
5

目前我正在使用iReport進行設計的第一次報告。在某些情況下,jasper會陷入某種無限循環/遞歸調用中。 Jasper的日誌重複如下:如何調試jasper報告?

[...] 
12-04-10 10:29:59,222 DEBUG s.engine.fill.JRVerticalFiller|Fill 1207280802: page footer 
12-04-10 10:29:59,222 DEBUG ports.engine.fill.JRBaseFiller|Fill 1207280802: adding page 38849 
12-04-10 10:29:59,222 DEBUG ts.engine.fill.JRFillSubreport|Fill 1207280802: resuming 849817670 
12-04-10 10:29:59,222 DEBUG e.fill.JRThreadSubreportRunner|Fill 849817670: notifying to continue 
12-04-10 10:29:59,222 DEBUG e.fill.JRThreadSubreportRunner|Fill 849817670: waiting for fill result 
12-04-10 10:29:59,222 DEBUG e.fill.JRThreadSubreportRunner|Fill 849817670: notified to continue 
12-04-10 10:29:59,222 DEBUG ports.engine.fill.JRBaseFiller|Fill 849817670: suspeding subreport runner 
12-04-10 10:29:59,222 DEBUG e.fill.JRThreadSubreportRunner|Fill 849817670: notifying on suspend 
12-04-10 10:29:59,222 DEBUG e.fill.JRThreadSubreportRunner|Fill 849817670: waiting to continue 
12-04-10 10:29:59,222 DEBUG e.fill.JRThreadSubreportRunner|Fill 849817670: notified of fill result 
12-04-10 10:29:59,222 DEBUG ts.engine.fill.JRFillSubreport|Fill 1207280802: subreport 849817670 to continue 
[...] 

該序列被重複記錄相同的填充ID。我在解釋這些調試日誌時遇到困難。除了解決具體問題,我對調試Jasper報告的策略感興趣。那麼,你如何調試報告?

+0

你說的是'iReport'調試嗎? – 2012-04-10 14:30:48

+0

您可以嘗試使用Java應用程序測試您的報告(例如,您可以使用JasperReports API)。您可以下載JR API的源代碼,以便您可以輕鬆地調試此類應用程序。 – 2012-04-10 14:32:36

+0

@Alex K#1:不,我想用幾個子報表調試jasper報告。 #2:那麼,我已經在使用sources和eclipse來瀏覽代碼,但我想知道是否有更好的選擇 – GLA 2012-04-10 14:50:02

回答

5

您可以使用log4j.properties從iReport獲取一些附加信息。 Jasper支持人員向我提供了以下步驟,以幫助我瞭解具有多個子報告和動態SQL在他們之間傳遞的報告生成的SQL。

  1. 創建log4j.properties文件(其放置ireport/etc下),與 內容如下:

    ############################################# 
    log4j.appender.fileout=org.apache.log4j.RollingFileAppender 
    log4j.appender.fileout.File=C:/tmp/iReport.log 
    log4j.appender.fileout.MaxFileSize=1024KB 
    log4j.appender.fileout.MaxBackupIndex=1 
    log4j.appender.fileout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.fileout.layout.conversionPattern=%d{ABSOLUTE} %5p 
    %c{1},%t:%L - %m%n 
    log4j.rootLogger=warn, fileout 
    log4j.logger.net.sf.jasperreports.engine.query=debug 
    ############################################# 
    

    利用上述,輸出日誌將在c:/tmp 文件夾中的iReport.log

  2. 編輯ireport/etc/ireportpro.conf並在 default_options參數添加以下內容:

    -J-Dlog4j.configuration=file:/E:/Server/Server451/ireport/etc/log4j.properties 
    

    所以就變成:

    default_options="-J-Xms24m -J-Xmx512m 
    
    -J-Dorg.netbeans.ProxyClassLoader.level=1000 -J-XX:MaxPermSize=256m 
    -J-Dlog4j.configuration=file:/E:/Server/Server451/ireport/etc/log4j.properties" 
    

    請注意上面的目錄,則需要進行調整到 您自己的iReport安裝的具體目錄。

  3. 重新啓動iReport並執行報告,生成的SQL將在iReport.log中輸出 。