debugging - 如何调试 jasper 报告?

标签 debugging jasper-reports ireport

目前我正在使用 iReport 设计我的第一份报告。在某些情况下,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
    #############################################
    

    有了上面的,输出日志将在iReport.logc:/tmp文件夹。
  • 编辑 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 中的输出.
  • 关于debugging - 如何调试 jasper 报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090254/

    相关文章:

    c++ - 代码工作流程出现问题时如何快速调试?

    c++ - 阻止调试器进入功能

    localization - iReport:如何根据法语区域设置格式化日期

    excel - 设置 jasper 报告列的格式

    java - 贾斯珀报告 : showing images dynamically depending on field values

    postgresql - iReport 设计器 : permission denied for relation

    django - 在 Nginx 后面调试 Django/Gunicorn

    windows - 没有在主机上运行的 Windows 调试器上打印 DbgPrintEx (Windows 10)

    java - 碧 Jade 报告 : Same template for CSV and PDF Issue

    xml - 使用 XML 数据源而不是空白页时没有数据时显示 Jasper 报告