如何调试jasper报告?

GLA*_*GLA 10 debugging jasper-reports ireport

目前我正在使用iReport进行设计的第一份报告.在某些条件下,jasper陷入某种infinte循环/递归调用.贾斯珀的日志反复出现:

[...]
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
[...]
Run Code Online (Sandbox Code Playgroud)

使用相同的填充ID重复记录此序列.我在解释这些调试日志时遇到了困难.除了解决具体问题,我对调试jasper报告的策略感兴趣.那么,你如何调试报告?

小智 6

您可以使用它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
    #############################################
    
    Run Code Online (Sandbox Code Playgroud)

    使用上面的内容,输出日志将iReport.log位于c:/tmp 文件夹中.

  2. ireport/etc/ireportpro.confdefault_options参数中编辑并添加以下内容 :

    -J-Dlog4j.configuration=file:/E:/Server/Server451/ireport/etc/log4j.properties
    
    Run Code Online (Sandbox Code Playgroud)

    所以它变成:

    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"
    
    Run Code Online (Sandbox Code Playgroud)

    请注意以上目录,您需要将其调整到您自己的iReport安装目录.

  3. 重新启动iReport并执行报告,然后输出生成的SQL iReport.log.