[ 
https://issues.apache.org/jira/browse/LOG4J2-3627?focusedWorklogId=924205&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-924205
 ]

ASF GitHub Bot logged work on LOG4J2-3627:
------------------------------------------

                Author: ASF GitHub Bot
            Created on: 02/Jul/24 17:00
            Start Date: 02/Jul/24 17:00
    Worklog Time Spent: 10m 
      Work Description: alan0428a commented on code in PR #2691:
URL: https://github.com/apache/logging-log4j2/pull/2691#discussion_r1654818565


##########
log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java:
##########
@@ -295,12 +295,35 @@ public String getCauseStackTraceAsString(
             final List<String> ignorePackages,
             final TextRenderer textRenderer,
             final String suffix,
-            final String lineSeparator) {
+            final String lineSeparator,
+            final Integer linesToKeep) {
         final StringBuilder sb = new StringBuilder();
-        ThrowableProxyRenderer.formatCauseStackTrace(this, sb, ignorePackages, 
textRenderer, suffix, lineSeparator);
+        ThrowableProxyRenderer.formatCauseStackTraceTo(
+                this, sb, ignorePackages, textRenderer, suffix, lineSeparator, 
linesToKeep);
         return sb.toString();
     }
 
+    /**
+     * Formats the stack trace with cause exception.
+     *
+     * @param sb Destination.
+     * @param ignorePackages List of packages to be ignored in the trace.
+     * @param textRenderer The message renderer.
+     * @param suffix Append this to the end of each stack frame.
+     * @param lineSeparator The end-of-line separator.
+     * @param linesToKeep The total line count of final result
+     */
+    public void formatCauseStackTraceTo(

Review Comment:
   Got it. Thanks for the guidance!



##########
log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyRenderer.java:
##########
@@ -309,4 +311,24 @@ private static void renderOn(
             textRenderer.render(msg, output, "Message");
         }
     }
+
+    private static void truncateLines(
+            StringBuilder sb, String lineSeparator, Integer linesToKeep, 
TextRenderer textRenderer) {

Review Comment:
   Updated. As for `truncateLines()` in `ThrowablePatternConverter` and 
`ThrowableProxyRenderer`, I will fix them when I move the method to util.



##########
log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyRenderer.java:
##########
@@ -309,4 +311,24 @@ private static void renderOn(
             textRenderer.render(msg, output, "Message");
         }
     }
+
+    private static void truncateLines(
+            StringBuilder sb, String lineSeparator, Integer linesToKeep, 
TextRenderer textRenderer) {
+        if (linesToKeep == null) {
+            return;
+        }
+
+        String content = sb.toString();
+        String[] lines = content.split(lineSeparator);
+
+        if (lines.length <= linesToKeep) {
+            return;
+        }
+
+        sb.setLength(0);
+        for (int i = 0; i < linesToKeep; i++) {
+            sb.append(lines[i]);
+            textRenderer.render(lineSeparator, sb, "Text");
+        }

Review Comment:
   Got it. Let me implement it



##########
log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java:
##########
@@ -235,4 +235,69 @@ protected String getSuffix(final LogEvent event) {
     public ThrowableFormatOptions getOptions() {
         return options;
     }
+
+    private boolean requireAdditionalFormatting(String suffix) {
+        return !options.allLines() || nonStandardLineSeparator || 
Strings.isNotBlank(suffix) || options.hasPackages();
+    }
+
+    private boolean ignoreElement(final StackTraceElement element, final 
List<String> ignorePackages) {
+        if (ignorePackages != null) {
+            final String className = element.getClassName();
+            for (final String pkg : ignorePackages) {
+                if (className.startsWith(pkg)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private void appendSuppressedCount(
+            final StringBuilder sb, final int count, final String suffix, 
final String lineSeparator) {
+        if (count == 1) {
+            sb.append("\t... ");
+        } else {
+            sb.append("\t... suppressed ");
+            sb.append(count);
+            sb.append(" lines");
+        }
+        appendSuffix(sb, suffix);
+        sb.append(lineSeparator);
+    }
+
+    private void appendEntry(
+            final StackTraceElement stackTraceElement,
+            final StringBuilder sb,
+            final String suffix,
+            final String lineSeparator) {
+        sb.append(stackTraceElement.toString());
+        appendSuffix(sb, suffix);
+        sb.append(lineSeparator);
+    }
+
+    private void appendSuffix(StringBuilder buffer, String suffix) {
+        if (Strings.isNotBlank(suffix)) {
+            buffer.append(' ');
+            buffer.append(suffix);
+        }
+    }
+
+    private void truncateLines(StringBuilder sb, String lineSeparator, Integer 
linesToKeep) {

Review Comment:
   Got it. Let me create new class in log4j-core 😃 



##########
log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java:
##########
@@ -401,15 +423,17 @@ public String getExtendedStackTraceAsString(
      * @param textRenderer The message renderer.
      * @param suffix Append this to the end of each stack frame.
      * @param lineSeparator The end-of-line separator.
+     * @param maxLineCount The total line count of final result
      */
     public void formatExtendedStackTraceTo(
             final StringBuilder sb,
             final List<String> ignorePackages,
             final TextRenderer textRenderer,
             final String suffix,
-            final String lineSeparator) {
+            final String lineSeparator,
+            final Integer maxLineCount) {

Review Comment:
   Oh...I understand it now. Thanks for the guidance!



##########
log4j-core/src/main/java/org/apache/logging/log4j/core/package-info.java:
##########
@@ -18,7 +18,7 @@
  * Implementation of Log4j 2.
  */
 @Export
-@Version("2.24.0")
+@Version("3.0.0")

Review Comment:
   reverted





Issue Time Tracking
-------------------

    Worklog Id:     (was: 924205)
    Time Spent: 1h 20m  (was: 1h 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: 1h 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)

Reply via email to