You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Hüseyin Kartal (JIRA)" <ji...@apache.org> on 2015/09/20 19:03:04 UTC

[jira] [Comment Edited] (LOG4J2-1124) LogManager.getLogger()

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

Hüseyin Kartal edited comment on LOG4J2-1124 at 9/20/15 5:02 PM:
-----------------------------------------------------------------

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 use if for the created Logger instead of the declaring AbstractBase class.


was (Author: hsyn):
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-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org