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

Anton Korenkov edited comment on LOG4J2-2272 at 2/27/18 12:50 PM:
------------------------------------------------------------------

I will rephrase my first question. According to this sentence 
{quote}
By default, location is not passed to the I/O thread by asynchronous loggers. 
If one of your layouts or custom filters needs location information, you need 
to set "includeLocation=true" in the configuration of all relevant loggers, 
including the root logger.
{quote}
I thought that if we've specified 
{{-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector}}
 then location won't be calculated in {{AsyncLogger#calcLocationIfRequested}} 
due to false value in includeLocation. However it was true. Here is adjusted 
code snippet:


{code:java}
package org.apache.logging.log4j;

import org.apache.logging.log4j.core.async.AsyncLogger;
import org.apache.logging.log4j.spi.LoggerContext;
import org.junit.Assert;
import org.junit.Test;

import java.lang.reflect.Field;

public class Log4jBrokenIncludeLocationTest {
        @Test
        public void includeLocationIsBrokenWithAsyncContextSelector() throws 
IllegalAccessException, NoSuchFieldException {
                System.setProperty("Log4jContextSelector", 
"org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
                LoggerContext context = LogManager.getContext(false);
                Logger logger = 
context.getLogger("Log4jBrokenIncludeLocationTest");
                Assert.assertTrue(logger instanceof AsyncLogger);
                AsyncLogger asyncLogger = (AsyncLogger)logger;
                Field f = 
asyncLogger.getClass().getDeclaredField("includeLocation");
                f.setAccessible(true);
                Object inclLocationValue = f.get(asyncLogger);
                Assert.assertFalse((boolean)inclLocationValue);
        }
}
{code}




was (Author: korenkov):
I will rephrase my first question. According to this sentence 
{quote}
By default, location is not passed to the I/O thread by asynchronous loggers. 
If one of your layouts or custom filters needs location information, you need 
to set "includeLocation=true" in the configuration of all relevant loggers, 
including the root logger.
{quote}
I thought that if we've specified 
{{-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector}}
 then location won't be calculated in {{AsyncLogger#calcLocationIfRequested}} 
due to false value in includeLocation. However it was true

> includeLocation property for async loggers
> ------------------------------------------
>
>                 Key: LOG4J2-2272
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2272
>             Project: Log4j 2
>          Issue Type: Question
>          Components: Core
>    Affects Versions: 2.10.0
>            Reporter: Anton Korenkov
>            Priority: Minor
>
> According to [link|https://logging.apache.org/log4j/2.0/manual/async.html]:
> {quote}By default, 
> [location|https://logging.apache.org/log4j/2.0/manual/async.html#Location] is 
> not passed to the I/O thread by asynchronous loggers. If one of your layouts 
> or custom filters needs location information, you need to set 
> "includeLocation=true" in the configuration of all relevant loggers, 
> including the root logger.
> {quote}
> However, if I create logger with default configuration and 
> '-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector'
>  vm option 'includeLocation' defaults to 'true'. Is it expected behavior or 
> glitch?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to