[ https://issues.apache.org/jira/browse/LOG4J2-1124?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14876730#comment-14876730 ]
Ralph Goers commented on LOG4J2-1124: ------------------------------------- First, what you are printing is the name of the Logger. In general, there really is no requirement that it be the name of any class. But because it is a convention we do offer the method to obtain the logger that returns the name of the class that called it. Since you called getLogger() from LogTest.AbstractLogger I don't see how we are doing anything wrong. Furthermore, this method of creating your own Logger is also going to cause the %C, %F, %I, %L, and %M pattern converters to not work correctly. They will alway print the information regarding LogTest.AbstractLogger or LogTest.java instead of the caller of your methods. If you really want to create your own Loggers then you should use ExtendedLogger or ExtendedLoggerWrapper. Is there a reason you need to create your own logger? > 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 AbstractLogger { > Logger logger = LogManager.getLogger(); > public AbstractLogger() { > super(); > logger.info("init"); > } > void log(String s) { > logger.info(s); > } > } > protected class InstanceLogger extends AbstractLogger { > @Override > void log(String s) { > super.log(s); > logger.info(s); > } > } > protected class InstanceLogger2 extends AbstractLogger { > @Override > void log(String s) { > super.log(s); > logger.info(s); > } > } > @Test > public final void testLoggerInstance() { > new InstanceLogger().log("logging"); > new InstanceLogger2().log("logging"); > } > } > {code} > The Output is > {code} > 2015-09-18 13:51:21,830 INFO - main - > d.z.w.l.LogUtilsTest$AbstractLogger - [] * init - > > 2015-09-18 13:51:21,831 INFO - main - > d.z.w.l.LogUtilsTest$AbstractLogger - [] * logging - > > 2015-09-18 13:51:21,831 INFO - main - > d.z.w.l.LogUtilsTest$AbstractLogger - [] * logging - > > 2015-09-18 13:51:21,831 INFO - main - > d.z.w.l.LogUtilsTest$AbstractLogger - [] * init - > > 2015-09-18 13:51:21,831 INFO - main - > d.z.w.l.LogUtilsTest$AbstractLogger - [] * logging - > > 2015-09-18 13:51:21,831 INFO - main - > d.z.w.l.LogUtilsTest$AbstractLogger - [] * 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$InstanceLogger - [] * init - > > 2015-09-18 13:53:50,538 INFO - main - > d.z.w.l.LogUtilsTest$InstanceLogger - [] * logging - > > 2015-09-18 13:53:50,538 INFO - main - > d.z.w.l.LogUtilsTest$InstanceLogger - [] * logging - > > 2015-09-18 13:53:50,543 INFO - main - > d.z.w.l.LogUtilsTest$InstanceLogger2 - [] * init - > > 2015-09-18 13:53:50,543 INFO - main - > d.z.w.l.LogUtilsTest$InstanceLogger2 - [] * logging - > > 2015-09-18 13:53:50,543 INFO - main - > d.z.w.l.LogUtilsTest$InstanceLogger2 - [] * 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