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]>

Reply via email to