logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 44765] New: SyslogAppender should not attempt to remove inital tabs from stack trace lines
Date Mon, 07 Apr 2008 11:24:28 GMT
https://issues.apache.org/bugzilla/show_bug.cgi?id=44765

           Summary: SyslogAppender should not attempt to remove inital tabs
                    from stack trace lines
           Product: Log4j
           Version: 1.2
          Platform: All
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Appender
        AssignedTo: log4j-dev@logging.apache.org
        ReportedBy: morten.hattesen@gmail.com


Prior to Log4J 1.2.15, the SyslogAppender removed the first character from each
stacktrace line, causing unwanted benavior (possibly exceptions).

This was partially fixed (ref issue 40502) 
https://issues.apache.org/bugzilla/show_bug.cgi?id=40502

The above fix means that the first character of each stack trace line is
removed only, if it is a tab character ('\t').

I will argue, that the initial tab character should NOT be removed at all,
since it provides useful indentation, making it easier to view stacktraces in a
syslog. If, for some reason, it is not desirable to have tab characters in the
syslog, the tab character should be replaced with a suitable number of spaces.

EXAMPLE:
========

This stack-trace...
---------------------------------------------------------------------------

2008-04-07 12:23:03,479 ERROR com.acme.SyslogTest - Error with stacktrace
java.lang.RuntimeException: Second
        at dk.cph.SyslogTest.testStackTrace(SyslogTest.java:61)
(...)
        at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
Caused by: java.lang.RuntimeException: First
        ... 17 more
---------------------------------------------------------------------------

...would, prior to 1.2.14, be displayed in syslog as...

---------------------------------------------------------------------------
Apr  7 12:14:04 localhost 2008-04-07 12:14:03,975 ERROR com.acme.SyslogTest -
Error with stacktrace
Apr  7 12:14:04 localhost java.lang.RuntimeException: Second
Apr  7 12:14:04 localhost at
dk.cph.SyslogTest.testStackTrace(SyslogTest.java:56)
(...)
Apr  7 12:14:04 localhost at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Apr  7 12:14:04 localhost aused by: java.lang.RuntimeException: First
Apr  7 12:14:04 localhost ... 22 more
Apr  7 12:40:06 localhost 2008-04-07 12:23:03,479 ERROR com.acme.SyslogTest -
Error with stacktrace
---------------------------------------------------------------------------


(Notice the "aused by:" line, and the missing indentation).

With the proposed solution (below), the stack-trace would be displayed as:

---------------------------------------------------------------------------
Apr  7 12:14:04 localhost 2008-04-07 12:14:03,975 ERROR com.acme.SyslogTest -
Error with stacktrace
Apr  7 12:14:04 localhost java.lang.RuntimeException: Second
Apr  7 12:14:04 localhost     at
dk.cph.SyslogTest.testStackTrace(SyslogTest.java:56)
(...)
Apr  7 12:14:04 localhost     at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Apr  7 12:14:04 localhost Caused by: java.lang.RuntimeException: First
Apr  7 12:14:04 localhost     ... 22 more
Apr  7 12:40:06 localhost 2008-04-07 12:23:03,479 ERROR com.acme.SyslogTest -
Error with stacktrace
---------------------------------------------------------------------------

(note: with a long stacktrace, the indentation is clearly more useful)


PROPOSAL
========

While the above fix reinstates the "Caused by", I feel that reinserting the
initial tab (or spaces) would be preferable, since it would make it easier to
identify the "Caused by" statement in the stack-trace.

My proposal is to replace initial tab with 4 spaces, which could be achieved
with the following change to org.apache.log4j.net.SyslogAppender.java:

change:
               if (s[i].charAt(0) == '\t') {
                 sqw.write(TAB+s[i].substring(1));
               } else {

to:
               if (s[i].charAt(0) == '\t') {
                 sqw.write(TAB+"    "+s[i].substring(1));
               } else {

(String garbage collection optimization could be achieved by replacing the
string concatenation with multiple calls to write, and/or introducing a
TAB_INDENT string constant).


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message