How to debug jasper reports?

I am currently working on my first reports using iReport for design. Under certain conditions, jasper gets stuck in some kind of loop / recursive infinte call. Jasper magazines are repeated several times:

[...]
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
[...]

This sequence is re-registered with identical filler identifiers. I'm having difficulty interpreting these debug logs. In addition to solving a specific problem, I'm interested in strategies for debugging reports about jasper. So how do you debug reports?

+10
source share
2 answers

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.log c:/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.

+6

" ", , , .

-, Java, :

String loggerName = "jasper.report." + reportName;
Logger logger = LoggerFactory.getLogger(loggerName);
reportParameters.put("log", new JasperLogger(logger));

log . , (, " "), :

$P{log}.debug("printWhen for text field ...: {}", ...original expression...)

:

import org.slf4j.Logger;

/** A wrapper for a SLF4J logger which allows to log expressions as they are evaluated. */
public class JasperLogger {

    private Logger delegate;

    public JasperLogger(Logger delegate) {
        this.delegate = delegate;
    }

    public <T> T debug(String message, T value) {
        delegate.debug(message, value);
        return value;
    }

    public <T> T info(String message, T value) {
        delegate.info(message, value);
        return value;
    }

    public <T> T error(String message, T value) {
        delegate.error(message, value);
        return value;
    }
}
+1

All Articles