Oops, you're right. v2:
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..41082bb 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();
+ }
+ 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;
}
Gary
On Mon, Oct 26, 2015 at 10:50 AM, Matt Sicker <[email protected]> wrote:
> 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]>
>
--
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