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

Joern Huxhorn commented on LOG4J2-1676:
---------------------------------------

Because {{getThrowable()}} is part of the {{Message}} interface.

One can implement custom messages like this:

{code:java}
public class FooMessage
                implements Message
{
        @Override
        public String getFormattedMessage() {
                return "foo message";
        }

        @Override
        public String getFormat() {
                return "foo message format";
        }

        @Override
        public Object[] getParameters() {
                return new Object[]{"param1", "param2"};
        }

        @Override
        public Throwable getThrowable() {
                return new RuntimeException();
        }
}
{code}

It is very surprising that this message will create an event without a 
{{Throwable}}. At least Remko and I didn't have an immediate explanation.

Similarly, it shouldn't make a difference whether a 
{{ParameterizedMessageFactory}} is used internally in via
{code:java}
protected void logMessage(final String fqcn, final Level level, final Marker 
marker, final String message,
                final Object... params) {
        final Message msg = messageFactory.newMessage(message, params);
        logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
}
{code}
or manually via
{code:java}
logger.debug(new ParameterizedMessage(messagePattern, arguments));
{code}


> Use Message.getThrowable() in log(Message) methods
> --------------------------------------------------
>
>                 Key: LOG4J2-1676
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1676
>             Project: Log4j 2
>          Issue Type: Bug
>    Affects Versions: 2.5, 2.6, 2.7
>            Reporter: Joern Huxhorn
>
> All {{log(Message)}} methods should use {{Message.getThrowable()}}, e.g.
> {code:java}
>     public void debug(final Message msg) {
>         logIfEnabled(FQCN, Level.DEBUG, null, msg, msg != null ? 
> msg.getThrowable() : null);
>     }
> {code}
> instead of the current
> {code:java}
>     public void debug(final Message msg) {
>         logIfEnabled(FQCN, Level.DEBUG, null, msg, null);
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to