Description
Description
I was using a failover appender with an AsyncLoggerContextSelector and wanted to print the line number. I set includeLocation to true in the root logger, but there were still no line numbers in the logs. We encountered the same problem with the async appender, even with includeLocation set to true.
I believe this is because the requiresLocation function in FailoverAppender is the default implementation in AbstractAppender, which relies on the layout inside the appender. However, for FailoverAppender, we do not have a layout, and thus fail to generate the location field in the log event object. Additionally, the Async logger uses a RingBufferLogEvent, which directly reads the location field, so there's no location to print. This issue is also true for AsyncAppender.
Configuration
Version: 2.24.2
Operating system: Windows11
JDK: OpenJDK23
Reproduction
Log4j2.xml
<Configuration>
<Appenders>
<Console name="CONSOLE">
<PatternLayout pattern="%m%L%n"/>
</Console>
<Console name="CONSOLE2">
<PatternLayout pattern="%m%L%n"/>
</Console>
<Failover name="Failover" primary="CONSOLE">
<Failovers>
<AppenderRef ref="CONSOLE2"/>
</Failovers>
</Failover>
</Appenders>
<Loggers>
<Root level="INFO" includeLocation="true">
<AppenderRef ref="Failover"/>
</Root>
</Loggers>
</Configuration>
log4j2.component.properties
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector