[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] Managing debug logging in complex transforms: what do people do?
Subject: [xsl] Managing debug logging in complex transforms: what do people do? From: Eliot Kimber <ekimber@xxxxxxxxxxxx> Date: Mon, 24 Mar 2014 12:31:07 -0500 |
For whatever reason I find using interactive debugging unhelpful for debugging XSLT processing (but I couldn't code a line of Java without it). Thus I depend very heavily on debug messages in my XSLTs. I used to just emit messages and then comment them out or delete them when I was done, but then I found myself recreating those messages when I had to return to that bit of code. Then I started using a runtime parameter to turn debugging on or off globally and using IF checks to output my messages. But that results in a lot of messages when you've got a lot of debug messages, most of which are not relevant to your current problem, so back to commenting things out or disabling the IF check (e.g., test="false() and $doDebug"). Lately I've been trying the technique of using a tunnel parameter to communicate the debug state to each template or function, which lets me selectively turn on debugging within a given code path, e.g.: <!-- Global variable set from runtime parameter --> <xsl:variable name="doDebug" as="xs:boolean" select="matches($debug, '(true|yes|1|on)', 'i')" /> <xsl:template match="/"> <xsl:param name="doDebug" as="xs:boolean" tunnel="yes" select="$doDebug" /> <xsl:apply-templates> <xsl:param name="doDebug" as="xs:boolean" tunnel="yes" select="$doDebug"/> </xsl:apply-templates> </xsl:template> <xsl:template match="foo"> <xsl:param name="doDebug" as="xs:boolean" tunnel="yes" select="false()" /> </xsl:template> Because you can shadow a parameter within a template, you can create a doDebug variable within a template to turn debugging on or off and that setting will propagate to the descendant templates. This approach is working well to make it easier for me to control my debugging dynamically and more easily focus my messaging. But it adds some overhead to the code in that you need the debug parameter and with-param everywhere, which isn't that big of a deal to add but still. My question: is there a better way to do this? Am I overlooking some feature of XSLT 2 (or 3) that would make managing debugging messages easier? Should I step up to a more complete messaging framework that mirrors e.g., log4j? This is in the context of quite complex transforms with multiple phases, lots of twisty logic, non-obvious stuff, and so on, as opposed to workaday HTML- and FO-generation transforms, for which this level of sophistication is not usually required. Thanks, Eliot bbbbb Eliot Kimber, Owner Contrext, LLC http://contrext.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Civil Discourse Required , Geert Josten | Thread | Re: [xsl] Managing debug logging in, Brian Chrisman |
Re: [xsl] Civil Discourse Required , Michael Kay | Date | Re: [xsl] XSLT 1 and grouping numbe, Dimitre Novatchev |
Month |
Keywords