如何调试jasper报告?
问题描述:
目前我正在使用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报告的策略感兴趣。那么,你如何调试报告?
答
您可以使用log4j.properties
从iReport获取一些附加信息。 Jasper支持人员向我提供了以下步骤,以帮助我了解具有多个子报告和动态SQL在他们之间传递的报告生成的SQL。
-
创建
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
。 -
编辑
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安装的具体目录。
重新启动iReport并执行报告,生成的SQL将在
iReport.log
中输出 。
你说的是'iReport'调试吗? – 2012-04-10 14:30:48
您可以尝试使用Java应用程序测试您的报告(例如,您可以使用JasperReports API)。您可以下载JR API的源代码,以便您可以轻松地调试此类应用程序。 – 2012-04-10 14:32:36
@Alex K#1:不,我想用几个子报表调试jasper报告。 #2:那么,我已经在使用sources和eclipse来浏览代码,但我想知道是否有更好的选择 – GLA 2012-04-10 14:50:02