[ https://issues.apache.org/jira/browse/LOG4J2-3627?focusedWorklogId=924277&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-924277 ]
ASF GitHub Bot logged work on LOG4J2-3627: ------------------------------------------ Author: ASF GitHub Bot Created on: 02/Jul/24 18:54 Start Date: 02/Jul/24 18:54 Worklog Time Spent: 10m Work Description: vy commented on PR #2691: URL: https://github.com/apache/logging-log4j2/pull/2691#issuecomment-2204076668 > Just checked it's because before the PR, `ThrowablePatternRender#formatOption` serialize excpetion using [Throwable#printStackTrace](https://github.com/apache/logging-log4j2/blob/400c65bdbe82f50fcef3dac1bd7130a8a2d3197a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java#L193). But in the new implementation, I get the exception info using `Throwable.getStackTrace` and serialize using `appendEntry`, whose implementation is different from `Throwable#printStackTrace`. > > The implementation in `Throwable#printStackTrace` is quite [complicated](https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/lang/Throwable.java#L659-L666), so I think it's better to get the exception info using `Throwable#printStackTrace`, instead of building our own implementation if we don't want to change the output format. > > I am thinking the flow will be like(Just like the old way, but do not use `String#split` and add filter package) > > ``` > 1. Get exception info from `Throwable#printStackTrace` > 2. Get `StringBuffer` from `StringWriter#getBuffer()`, which supports `indexOf()` since it extends `AbstractStringBuilder` > 3. Use similar approach in `StringBuilders.truncateAfterDelimiter` but also append suffix, filter package and stop the loop when the line count reaches depth. > ``` > > Though the behavior is different from `%rEx` and `%xEx`(which processes through all lines then truncate), its "process and early stop" approach is same as the old implementation. @alan0428a, completely agreed with the idea that we should use `Throwable#printStackTrace()` wherever possible, i.e., in `ThrowablePatternConverter` (i.e., `%ex`) and `RootThrowablePatternConverter` (i.e., `%rEx`). The former can have a package-private `Throwable` rendering method (accepting `packages` and `maxLineCount`) that both can use. `ExtendedThrowablePatternConverter` (i.e., `%xEx`) needs to operate on a `ThrowableProxy`, hence there we need to roll out our own `Throwable#printStackTrace()`. Issue Time Tracking ------------------- Worklog Id: (was: 924277) Time Spent: 2h 50m (was: 2h 40m) > PatternLayout: %xEx{ [ "short" | depth]} not working > ---------------------------------------------------- > > Key: LOG4J2-3627 > URL: https://issues.apache.org/jira/browse/LOG4J2-3627 > Project: Log4j 2 > Issue Type: Bug > Components: Layouts > Affects Versions: 2.11.0, 2.11.1, 2.11.2, 2.12.0, 2.12.1, 2.13.0, 2.13.1, > 2.13.2, 2.14.0, 2.13.3, 2.14.1, 2.15.0, 2.16.0, 2.17.1, 2.17.0, 2.12.3, > 2.12.2, 2.18.0, 2.12.4, 2.17.2, 2.19.0 > Reporter: Thorsten Heit > Assignee: Volkan Yazici > Priority: Minor > Time Spent: 2h 50m > Remaining Estimate: 0h > > According to the documentation the patterns {{{}%xEx{short{}}}} or > {{{}%xEx{<num>{}}}} should limit the number of lines of a stack trace that is > logged. This doesn't work; instead, the complete stack trace is logged > (always!). This is in contrary to the patterns {{%ex}} or {{%rEx}} where this > works. > In commit 9ff63b2e50be754ae394feda2c33d9e64fd0ab3a (2018-01-25) a change was > implemented because of LOG4J2-2195 (according to the commit message) that > removed the option of limiting the number of lines to output. > Therefore all versions since 2.11.0 should be affected. -- This message was sent by Atlassian Jira (v8.20.10#820010)