Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
2.3
-
Java 1.8.0_45 64-bit
Maven 3.3.1
Windows 7basically any...
Description
When gathering Location Information in Log4jLogEvent
Log4j uses Thread.currentThread().getStackTrace()
Using (new Throwable()).getStackTrace(); would be more performant especially for larger stacks according to various benchmarks:
- http://alexradzin.blogspot.co.at/2011/12/how-slow-getstacktrace-is.html
- http://stackoverflow.com/questions/2347828/how-expensive-is-thread-getstacktrace
This can easily be verified with a simple JMH Benchmark test.
What would help in addition is to skip the Log4j Part when iterating over the StackTrace - use i=4 or whatever you may consider as being save enough instead of starting with i=0.
Basically something like:
final StackTraceElement[] stackTrace = (new Throwable()).getStackTrace(); for (int i = 4; i < stackTrace.length; i++) { }