Is there a Log4J Layout/Formatter that prunes Stack Traces for exceptions?
Question
I'm looking for a Log4J Layout/Formatter that helps me prune stack-traces in exceptions a little better than the defaults. That the stack-execution is somewhere below main() is quite obvious and unnecessary for me to know, and that the exception occurred deeply within some other library is really nothing I can do too much about.
What I would like is a Layout that trims the stack-trace to, say the last 5 method-calls of method within my own code, identified by containing jar-file, package or something else.
Is there something along these lines, or do I have to write some magic myself?
Solution
I tried looking for this as well but didn't find anything satisfactory so I wrote up a custom ThrowableRenderer which prunes out extraneous stack frames. I've open sourced the code for others to use. Check out my blog post on it; you can find a link to the code there.
OTHER TIPS
I asked a similar question (about completely suppressing the stack trace a while back.
Unfortunately, there is no setting for that, you need to subclass PatternLayout to do it.
The "ex" or "exception" conversion word in logback-classic (log4j's successor) supports printing the specified number of stack trace lines. The "ex" conversion word is documented with the rest of conversion words. You need to scroll down a little.
If you need further information on this topic, please contact the logback-user mailing list.
There are three ways to do this:
- Find a library or code that someone else did
- Write it yourself (extend/implement)
- Use the default Layout, but prune the exception's stack before passing it to logger
You can write a custom Appender that has the special logic you need. That might be a good way to go.