[
https://issues.apache.org/jira/browse/LOG4J2-3627?focusedWorklogId=924413&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-924413
]
ASF GitHub Bot logged work on LOG4J2-3627:
------------------------------------------
Author: ASF GitHub Bot
Created on: 03/Jul/24 15:02
Start Date: 03/Jul/24 15:02
Worklog Time Spent: 10m
Work Description: alan0428a commented on PR #2691:
URL: https://github.com/apache/logging-log4j2/pull/2691#issuecomment-2206446614
@vy
Actually `%rEx` and `%xEx` both operate on a `ThrowableProxy` in existing
implementation. So only `%ex` needs to rely on `Throwable#printStackTrace()`.
However, the output of `Throwable#printStackTrace()` looks like below:
```
java.lang.IllegalArgumentException: IllegalArgument
at
org.apache.logging.log4j.core.pattern.ThrowableTest.testConverter(ThrowableTest.java:77)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
(too long to paste)
at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: java.lang.NullPointerException: null pointer
at
org.apache.logging.log4j.core.pattern.ThrowableTest.testConverter(ThrowableTest.java:76)
... 128 more
```
If we want to do filtering, we can only check if a line contains target
package in `options.getIgnorePackages()`.(Since we now we can only get the
whole `StringBuffer` from `StringWriter#getBuffer()`) I am thinking the logic
be like:
```
final int endIdx = buffer.indexOf(System.lineSeparator(), offset);
if (ignoreElement(buffer, options.getIgnorePackages(), offset, endIdx) {
...
}
private static boolean ignoreElement(final StringBuffer buffer, final
List<String> ignorePackages, final int startIdx, final int endIdx) {
if (ignorePackages != null) {
final String line = buffer.subString(startIdx, endIdx);
for (final String pkg : ignorePackages) {
if (line.contains(pkg)) {
return true;
}
}
}
return false;
}
```
Does this sound reasonable?
Issue Time Tracking
-------------------
Worklog Id: (was: 924413)
Time Spent: 4h 20m (was: 4h 10m)
> 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: 4h 20m
> 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)