[ 
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)

Reply via email to