David Lloyd created LOGMGR-137:
----------------------------------
Summary: Stack trace enhancement: repeated frames
Key: LOGMGR-137
URL:
https://issues.jboss.org/browse/LOGMGR-137
Project: JBoss Log Manager
Issue Type: Feature Request
Reporter: David Lloyd
Priority: Minor
During stack trace rendering, it would be nice (especially for stack overflows) if repeats
could be abbreviated, especially when the exception formatter is limited to a certain
number of frames. Take the example from WFLY-6678:
{code}
...etc...
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
...etc...
{code}
It would be nice to have something like this appear instead:
{code}
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
(2 frames repeated 49821 more times)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
at
com.inovelan.cloud.common.proxy.ProxyInterceptor.handleInvocationResult(ProxyInterceptor.java:37)
{code}
The wording is up for discussion but the idea is that we can save a lot of log space by
compacting identical frames. Because of the complexity in searching repeated frames, we
probably should have constraints, like one or more of the following ideas:
* Only compact frames if there is a net savings in the number of lines printed
* Only compact frames if there is a minimum of 4 repeats (one for the top, one for the
bottom, and at least two for the middle)
* Only look back a maximum of _n_ frames
* Only look back _n_ frames where _n_ depends on the total stack size (the idea being that
the bigger the stack, the more worthwhile the investment in trying to shrink it) - the
factor might have to be something weird like a square root to make sense though
* (insert other ideas here)
Determining a repeat in an efficient manner is tricky, because you have to search back up
to _n_ frames, meaning you have to check first if 1 frame is a repeat, then 2 frames, then
3 frames, etc. Furthermore there might be lesser and greater coincident repeats which
have to be dealt with sensibly. Good luck! :-)
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)