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

Reply via email to