[
https://issues.apache.org/jira/browse/LOG4J2-1570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16741775#comment-16741775
]
Ralph Goers commented on LOG4J2-1570:
-------------------------------------
Wow. I just ran the app and stopped it within StackLocator. I see
{code:java}
org.apache.logging.log4j.util.StackLocator.calcLocation(StackLocator.java:172)
org.apache.logging.log4j.util.StackLocatorUtil.calcLocation(StackLocatorUtil.java:71)
org.apache.logging.log4j.core.impl.MutableLogEvent.getSource(MutableLogEvent.java:369)
org.apache.logging.log4j.core.pattern.ClassNamePatternConverter.format(ClassNamePatternConverter.java:60)
org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:38)
org.apache.logging.log4j.core.layout.PatternLayout$PatternSerializer.toSerializable(PatternLayout.java:334)
org.apache.logging.log4j.core.layout.PatternLayout.toText(PatternLayout.java:233)
org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:218)
org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:58)
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:197)
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:190)
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:181)
org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:464)
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:448)
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:431)
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406)
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2170)
org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2125)
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108)
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2002)
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1974)
org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1321)
org.apache.App.foo(App.java:16)
org.apache.App.lambda$main$0(App.java:28)
org.apache.logging.log4j.util.LambdaUtil.getMessage(LambdaUtil.java:91)
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1996)
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1859)
org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1326)
org.apache.App.main(App.java:28){code}
When StackLocator processes this it starts at the bottom and proceeds up until
it finds the class of the logging implementation. In this case that is
org.apache.logging.log4j.spi.AbstractLoggger. It then uses the stacktrace
element immediately preceding that, which is App.main line 28, It seems the
stack locator logic is just wrong. I'm pretty sure this is just a mistake on my
part and we need to walk the stack from the top.
> Logging with a lambda expression with a method call that also logs causes
> logs within method call to reference line num and method name as parent method
> --------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: LOG4J2-1570
> URL: https://issues.apache.org/jira/browse/LOG4J2-1570
> Project: Log4j 2
> Issue Type: Bug
> Components: API
> Affects Versions: 2.6.2
> Reporter: Joel Berta
> Priority: Minor
> Labels: easyfix, newbie
>
> While logging a message using lambda expressions. If i call a method within
> the log message (i.e logger.info(() -> "foo" +bar()) which also logs
> messages, those logs within the called method will reference the line number
> and method name of the method which invoked it.
> Running the following code demonstrates this issue:
> {code:title=TestingLogging.java|borderStyle=solid}
> private static final Logger LOGGER =
> LogManager.getLogger(TestingLogging.class);
> public static String foo(){
> LOGGER.info("bar");
> return "foo";
> }
> public static void main(String[] args){
> System.out.println("correct method reference: ");
> LOGGER.info(foo());
> System.out.println("\nincorrect method reference: ");
> // causes logging in foo to reference
> // this line number and method (main)
> LOGGER.info(() -> foo());
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)