Looks like you've got some inconsistency: SimpleLoggerContext: key = name + "." + messageFactory.getClass().getClass();
LoggerContext: key = name + "." + messageFactory.getClass(); On 26 October 2015 at 12:47, Gary Gregory <[email protected]> wrote: > Maybe something like this? > > diff --git > a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java > b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java > index 6839290..84ff96d 100644 > --- > a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java > +++ > b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java > @@ -99,14 +99,21 @@ > > @Override > public ExtendedLogger getLogger(final String name, final > MessageFactory messageFactory) { > - final ExtendedLogger extendedLogger = loggers.get(name); > + String key = name; > + if (messageFactory != null) { > + key = name + "." + messageFactory.getClass().getClass(); > + } > + final ExtendedLogger extendedLogger = loggers.get(key); > if (extendedLogger != null) { > AbstractLogger.checkMessageFactory(extendedLogger, > messageFactory); > return extendedLogger; > } > - loggers.putIfAbsent(name, new SimpleLogger(name, defaultLevel, > showLogName, showShortName, showDateTime, > - showContextMap, dateTimeFormat, messageFactory, props, > stream)); > - return loggers.get(name); > + final SimpleLogger simpleLogger = new SimpleLogger(key, > defaultLevel, showLogName, showShortName, showDateTime, > + showContextMap, dateTimeFormat, messageFactory, props, > stream); > + // If messageFactory was null then we need to pull it out of the > logger now > + key = name + "." + simpleLogger.getMessageFactory().getClass(); > + loggers.putIfAbsent(key, simpleLogger); > + return loggers.get(key); > } > > @Override > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > index 6605129..228484b 100644 > --- > a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > +++ > b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > @@ -382,14 +382,20 @@ > */ > @Override > public Logger getLogger(final String name, final MessageFactory > messageFactory) { > - Logger logger = loggers.get(name); > + String key = name; > + if (messageFactory != null) { > + key = name + "." + messageFactory.getClass(); > + } > + Logger logger = loggers.get(key); > if (logger != null) { > AbstractLogger.checkMessageFactory(logger, messageFactory); > return logger; > } > > - logger = newInstance(this, name, messageFactory); > - final Logger prev = loggers.putIfAbsent(name, logger); > + logger = newInstance(this, key, messageFactory); > + // If messageFactory was null then we need to pull it out of the > logger now > + key = name + "." + logger.getMessageFactory().getClass(); > + final Logger prev = loggers.putIfAbsent(key, logger); > return prev == null ? logger : prev; > } > > Some tests fail of course, the ones that check for the old behavior... > > Gary > > On Mon, Oct 26, 2015 at 10:16 AM, Gary Gregory <[email protected]> > wrote: > >> I see this use case: >> >> Jar A calls LogManager.getLogger("Foo", messageFactoryA); >> Jar B calls LogManager.getLogger("Foo", messageFactoryB); >> >> Boom! >> >> Gary >> >> On Mon, Oct 26, 2015 at 8:52 AM, Mikael Ståldal < >> [email protected]> wrote: >> >>> Ah, that explains it. >>> >>> But how are you supposed to use Log4j 2 if you both use the JUL adapter >>> and does logging directly through the Log4j 2 API in the same application? >>> >>> On Mon, Oct 26, 2015 at 2:09 PM, Ralph Goers <[email protected] >>> > wrote: >>> >>>> The JUL logger does. >>>> >>>> Ralph >>>> >>>> On Oct 26, 2015, at 3:07 AM, Mikael Ståldal <[email protected]> >>>> wrote: >>>> >>>> The strange thing is that I have not called LogManager.getLogger() with >>>> any MessageFormat anywhere in my app. >>>> >>>> I am using the JUL adapter, the Log4j 1.2 adapter and the SLF4j impl. >>>> Can any of those do it? >>>> >>>> On Sat, Oct 24, 2015 at 1:49 AM, Remko Popma <[email protected]> >>>> wrote: >>>> >>>>> You called LogManager.getLogger(name) twice with the same name, once >>>>> specifying a MessageFormat, once with just the name. >>>>> >>>>> When you specified just the name, you may expect to get a Logger with >>>>> the default ParameterizedMessageFormat, but you're getting the cached >>>>> instance with MessageFormat, so things may not work as expected. >>>>> >>>>> (At least I think that 's what it means.) >>>>> >>>>> Sent from my iPhone >>>>> >>>>> On 2015/10/23, at 22:36, Mikael Ståldal <[email protected]> >>>>> wrote: >>>>> >>>>> I get this warning with Log4j 2.4.1: >>>>> >>>>> was 2015-10-23 13:32:36,181 main WARN The Logger >>>>> com.magine.contenturl.ContentUrlServer$ was created with the message >>>>> factory >>>>> org.apache.logging.log4j.message.MessageFormatMessageFactory@29bf34bb >>>>> and is now requested with a null message factory (defaults to >>>>> org.apache.logging.log4j.message.ParameterizedMessageFactory), which may >>>>> create log events with unexpected formatting. >>>>> >>>>> It seems to work properly though. What does it mean? >>>>> >>>>> -- >>>>> [image: MagineTV] >>>>> >>>>> *Mikael Ståldal* >>>>> Senior software developer >>>>> >>>>> *Magine TV* >>>>> [email protected] >>>>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>>>> >>>>> Privileged and/or Confidential Information may be contained in this >>>>> message. If you are not the addressee indicated in this message >>>>> (or responsible for delivery of the message to such a person), you may >>>>> not copy or deliver this message to anyone. In such case, >>>>> you should destroy this message and kindly notify the sender by reply >>>>> email. >>>>> >>>>> >>>> >>>> >>>> -- >>>> [image: MagineTV] >>>> >>>> *Mikael Ståldal* >>>> Senior software developer >>>> >>>> *Magine TV* >>>> [email protected] >>>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>>> >>>> Privileged and/or Confidential Information may be contained in this >>>> message. If you are not the addressee indicated in this message >>>> (or responsible for delivery of the message to such a person), you may >>>> not copy or deliver this message to anyone. In such case, >>>> you should destroy this message and kindly notify the sender by reply >>>> email. >>>> >>>> >>> >>> >>> -- >>> [image: MagineTV] >>> >>> *Mikael Ståldal* >>> Senior software developer >>> >>> *Magine TV* >>> [email protected] >>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>> >>> Privileged and/or Confidential Information may be contained in this >>> message. If you are not the addressee indicated in this message >>> (or responsible for delivery of the message to such a person), you may >>> not copy or deliver this message to anyone. In such case, >>> you should destroy this message and kindly notify the sender by reply >>> email. >>> >> >> >> >> -- >> E-Mail: [email protected] | [email protected] >> Java Persistence with Hibernate, Second Edition >> <http://www.manning.com/bauer3/> >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >> Spring Batch in Action <http://www.manning.com/templier/> >> Blog: http://garygregory.wordpress.com >> Home: http://garygregory.com/ >> Tweet! http://twitter.com/GaryGregory >> > > > > -- > E-Mail: [email protected] | [email protected] > Java Persistence with Hibernate, Second Edition > <http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > -- Matt Sicker <[email protected]>
