Remko Popma created LOG4J2-754:
----------------------------------

             Summary: Log4jLogEvent constructor unnecessarily clones 
ThreadContext stack
                 Key: LOG4J2-754
                 URL: https://issues.apache.org/jira/browse/LOG4J2-754
             Project: Log4j 2
          Issue Type: Improvement
          Components: Core
    Affects Versions: 2.0
            Reporter: Remko Popma


One of the Log4jLogEvent constructors currently looks like this:

{code}
public Log4jLogEvent(final String loggerName, final Marker marker, final String 
loggerFQCN, final Level level,
                     final Message message, final List<Property> properties, 
final Throwable t) {
    this(loggerName, marker, loggerFQCN, level, message, t,
        createMap(properties),
        ThreadContext.getDepth() == 0 ? null : ThreadContext.cloneStack(), null,
        null,
        // LOG4J2-628 use log4j.Clock for timestamps
        // LOG4J2-744 unless TimestampMessage already has one
        message instanceof TimestampMessage ? ((TimestampMessage) 
message).getTimestamp() :
            clock.currentTimeMillis());
}
{code}

This can be improved to call ThreadContext.getImmutableStack() to avoid making 
unnecessary copies of the stack, as was the intention of LOG4J2-154.
{code}
public Log4jLogEvent(final String loggerName, final Marker marker, final String 
loggerFQCN, final Level level,
                     final Message message, final List<Property> properties, 
final Throwable t) {
    this(loggerName, marker, loggerFQCN, level, message, t,
        createMap(properties),
        ThreadContext.getImmutableStack(), null, null,
        // LOG4J2-628 use log4j.Clock for timestamps
        // LOG4J2-744 unless TimestampMessage already has one
        message instanceof TimestampMessage ? ((TimestampMessage) 
message).getTimestamp() :
            clock.currentTimeMillis());
}
{code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to