You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Claude Brisson (Jira)" <ji...@apache.org> on 2019/09/08 10:57:00 UTC

[jira] [Resolved] (VELOCITY-835) Velocity Macro Stack Traces Patch

     [ https://issues.apache.org/jira/browse/VELOCITY-835?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claude Brisson resolved VELOCITY-835.
-------------------------------------
      Assignee: Claude Brisson
    Resolution: Fixed

Any object with access to a RuntimeServices object can call rsvc.getLogContext().getStackTrace() during rendering.

This stack trace will not only contain macro calls, but all the VTL stack, including #parse and references rendering.

It will be displayed in the logs in case of any throwed VelocityException.



> Velocity Macro Stack Traces Patch
> ---------------------------------
>
>                 Key: VELOCITY-835
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-835
>             Project: Velocity
>          Issue Type: Improvement
>          Components: Engine
>    Affects Versions: 1.7
>            Reporter: Luke Perkins
>            Assignee: Claude Brisson
>            Priority: Major
>              Labels: patch
>             Fix For: 1.7.x
>
>         Attachments: patchVelocityStackTraces.diff
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> Hey guys I made a patch to Velocity 1.7 to enable you to print out velocity stack traces. If you dump a stack trace in a Java function that was called from a velocity file, you usually see a bunch of calls to velocity parser functions like this in the Java stack trace:
> ...
>         at org.apache.velocity.runtime.parser.node.ASTIdentifier.execute(ASTIdentifier.java:209)
>         at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
>         at org.apache.velocity.runtime.parser.node.ASTReference.evaluate(ASTReference.java:530)
>         at org.apache.velocity.runtime.parser.node.ASTExpression.evaluate(ASTExpression.java:62)
>         at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:85)
>         at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
>         at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
>         at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
>         at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:216)
>         at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:312)
>         at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:230)
>         at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207)
>         at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
>         at org.apache.velocity.runtime.parser.node.ASTStringLiteral.value(ASTStringLiteral.java:330)
> ...
> The velocity stack trace created by this patches is much more informative:
> Velocity Stack Trace: Invocation of method 'getAvatarUrl' in class Member
>         at avatarUrl called at common/Macros.vm[line 426, column 29]
>         at simpleAvatarUrl called at common/Macros.vm[line 487, column 22]
>         at drawSimpleImage called at common/Macros.vm[line 487, column 3]
>         at simpleMemberAvatar called at site/photo_pane.vm[line 153, column 32]
>         at displayAvatarImage called at site/photo_pane.vm[line 162, column 3]
> This sort of stack trace is very useful when debugging code and trying to figure out which sequence of macros called into the currently executing Java code that dumped out the Java stack trace. Please consider adding something like this to a future release of Velocity - it would be very useful!
> Thanks,
> Luke



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org