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

Hüseyin Kartal commented on LOG4J2-1124:
----------------------------------------

Sorry for the unlucky naming of the classes in the example. I didn'nt intend to 
create my own loggers.
The example should only explain how we use loggers.

My expectation of the log4j2 api would be that the InstanceBase class is the 
caller and the LogManager.getLogger() should be used for the created Logger 
instead of the declaring AbstractBase class.

> LogManager.getLogger()
> ----------------------
>
>                 Key: LOG4J2-1124
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1124
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: API
>    Affects Versions: 2.3
>         Environment: win64 java8 osgi
>            Reporter: Hüseyin Kartal
>             Fix For: 2.4
>
>
> As in log4j2 api the LogManager.getLogger() call should return a logger for 
> the calling class.
> {code}
>     /**
>      * Returns a Logger with the name of the calling class.
>      * @return The Logger for the calling class.
>      * @throws UnsupportedOperationException if the calling class cannot be 
> determined.
>      */
>     public static Logger getLogger() {
>         return getLogger(ReflectionUtil.getCallerClass(2));
>     }
> {code}
> But in the following example the returned logger is get for the declaring 
> AbstractLogger class and not as assumed for the calling Classes 
> InstanceLogger and InstanceLogger2.
> {code}
> public class LogTest {
>     protected class AbstractBase {
>         Logger logger = LogManager.getLogger();
>         public AbstractBase() {
>             super();
>             logger.info("init");
>         }
>         void log(String s) {
>             logger.info(s);
>         }
>     }
>     protected class InstanceBase extends AbstractBase {
>         @Override
>         void log(String s) {
>             super.log(s);
>             logger.info(s);
>         }
>     }
>     protected class InstanceBase2 extends AbstractBase {
>         @Override
>         void log(String s) {
>             super.log(s);
>             logger.info(s);
>         }
>     }
>     @Test
>     public final void testLoggerInstance() {
>         new InstanceBase().log("logging");
>         new InstanceBase2().log("logging");
>     }
> }
> {code}
> The Output is
> {code}
> 2015-09-18 13:51:21,830  INFO - main                 - 
> d.z.w.l.LogUtilsTest$AbstractBase       -  [] * init -                        
>             
> 2015-09-18 13:51:21,831  INFO - main                 - 
> d.z.w.l.LogUtilsTest$AbstractBase      -  [] * logging -                      
>               
> 2015-09-18 13:51:21,831  INFO - main                 - 
> d.z.w.l.LogUtilsTest$AbstractBase      -  [] * logging -                      
>               
> 2015-09-18 13:51:21,831  INFO - main                 - 
> d.z.w.l.LogUtilsTest$AbstractBase      -  [] * init -                         
>            
> 2015-09-18 13:51:21,831  INFO - main                 - 
> d.z.w.l.LogUtilsTest$AbstractBase      -  [] * logging -                      
>               
> 2015-09-18 13:51:21,831  INFO - main                 - 
> d.z.w.l.LogUtilsTest$AbstractBase      -  [] * logging -                      
>               
> {code}
> A workaround is to call *LogManager.getLogger(getClass())* but i assume that 
> in most cases the logger for the calling class is needed so it would be nice 
> to change the behaviour of LogManager.getLogger().
> The output of the workaround is
> {code}
> 2015-09-18 13:53:50,538  INFO - main                 - 
> d.z.w.l.LogUtilsTest$InstanceBase      -  [] * init -                         
>            
> 2015-09-18 13:53:50,538  INFO - main                 - 
> d.z.w.l.LogUtilsTest$InstanceBase      -  [] * logging -                      
>               
> 2015-09-18 13:53:50,538  INFO - main                 - 
> d.z.w.l.LogUtilsTest$InstanceBase      -  [] * logging -                      
>               
> 2015-09-18 13:53:50,543  INFO - main                 - 
> d.z.w.l.LogUtilsTest$InstanceBase2     -  [] * init -                         
>            
> 2015-09-18 13:53:50,543  INFO - main                 - 
> d.z.w.l.LogUtilsTest$InstanceBase2     -  [] * logging -                      
>               
> 2015-09-18 13:53:50,543  INFO - main                 - 
> d.z.w.l.LogUtilsTest$InstanceBase2     -  [] * logging -                      
>               
> {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