[ 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