You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Joern Huxhorn (JIRA)" <ji...@apache.org> on 2013/04/21 16:15:15 UTC

[jira] [Commented] (LOG4J2-216) Detach ThrowableProxy from Throwable

    [ https://issues.apache.org/jira/browse/LOG4J2-216?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13637565#comment-13637565 ] 

Joern Huxhorn commented on LOG4J2-216:
--------------------------------------

The same applies for
StackTraceElement[] getStackTrace()
which should probably return some ExtendedStackTraceElement[] instead. It is currently impossible to retrieve packaging data without parsing a stacktrace string.
                
> Detach ThrowableProxy from Throwable
> ------------------------------------
>
>                 Key: LOG4J2-216
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-216
>             Project: Log4j 2
>          Issue Type: Wish
>    Affects Versions: 2.0-beta4
>            Reporter: Joern Huxhorn
>              Labels: throwable
>
> org.apache.logging.log4j.core.impl.ThrowableProxy currently has some downsides:
> 1.) Due to suppressed, that was added in 1.7, it is only possible to receive/handle exceptions containing suppressed exceptions with 1.7 on both sender and receiver side. A ThrowableProxy data type that does not extend Throwable could simply implement support for suppressed exceptions regardless of the Java version in use.
> 2.) It is currently impossible to retrieve the original class name of the Throwable that was the source of a proxy instance. The data exists in ThrowableProxy (the private name attribute) but there is no way to access it.
> 3.) There is no way to retrieve commonElementCount.
> 4.) Since ThrowableProxy extends Throwable, getCause and the conditionally available getSuppressed will return Throwable instances instead of ThrowableProxy instances - even though the returned instances will always be of type ThrowableProxy. So even if getName() and getCommonElementCount() would get added, a defensive cast would be necessary to access the data.
> Suggestion:
> Please consider implementing a simple data type without any dependencies introduced by extends.
> See https://github.com/huxi/lilith/blob/master/lilith-data/logging/src/main/java/de/huxhorn/lilith/data/logging/ThrowableInfo.java for an example.
> This data type should include the following methods:
> - String getName() // the FQCN of the original Throwable class
> - ThrowableProxy getCause()
> - ThrowableProxy[] getSuppressed()
> - int getOmittedElements() (or something similar, commonElementCount)
> Put that data type into org.apache.logging.log4j.core instead of org.apache.logging.log4j.core.impl (making it part of the public API) and change org.apache.logging.log4j.core.LogEvent.getThrown() to return a ThrowableProxy instead of Throwable.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

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