2012-04-10 118 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中输出 。