The flip side is that code like:

Message msg = obj instanceof Message ? (Message) obj :
messageFactory.newMessage(obj);
logMessage(... msg ...);

smells not-OO

Gary


On Fri, Feb 12, 2016 at 4:45 PM, Matt Sicker <[email protected]> wrote:

> You could still merge them and deprecate one perhaps?
>
> On 12 February 2016 at 18:42, Remko Popma <[email protected]> wrote:
>
>> The reason is that the Object returned by the Supplier<?> will be wrapped
>> in a new Message (
>> https://logging.apache.org/log4j/2.x/log4j-api/xref/org/apache/logging/log4j/spi/AbstractLogger.html#L1003),
>> while the Message returned by MessageSupplier is used as is (
>> https://logging.apache.org/log4j/2.x/log4j-api/xref/org/apache/logging/log4j/spi/AbstractLogger.html#L997
>> ).
>>
>> With hindsight, that could have been implemented without introducing
>> MessageSupplier. Darn, darn, darn!
>>
>> Could have been implemented like this:
>>
>> Object obj = supplier.get();
>> Message msg = obj instanceof Message ? (Message) obj :
>> messageFactory.newMessage(obj);
>> logMessage(... msg ...);
>>
>> Why didn't I see this sooner? Mea culpa.
>>
>>
>>
>> On Saturday, 13 February 2016, Matt Sicker <[email protected]> wrote:
>>
>>> Yeah really, what was the point of MessageSupplier as a separate
>>> interface from Supplier<Message>? They were both added in 2.4.
>>>
>>> On 12 February 2016 at 17:49, Gary Gregory <[email protected]>
>>> wrote:
>>>
>>>> Hi Remko,
>>>>
>>>> On Fri, Feb 12, 2016 at 3:31 PM, Remko Popma <[email protected]>
>>>> wrote:
>>>>
>>>>> I like the original code better since it gives more information.
>>>>>
>>>>
>>>> The trick is to get a message in your log that makes sense, and, in
>>>> this case, a debug-oriented toString() does not make sense (to me at least,
>>>> please see the test cases I committed today and play around). In general
>>>> though, FWIW, I do like toString() methods to be debug-oriented.
>>>>
>>>>
>>>>> Also, if you want to provide for lamdas that supply a Message, provide
>>>>> a method that accepts a MessageSupplier.
>>>>>
>>>>
>>>> We provide both Supplier<?> and MessageSupplier APIs, I am just testing
>>>> it all, starting with Supplier. I'll also add MessageSupplier tests.
>>>>
>>>> What is confusing is why we have both MessageSupplier and Supplier and
>>>> why MessageSupplier is not defined as extending Supplier<Message>.
>>>>
>>>> Gary
>>>>
>>>>
>>>>>
>>>>> The reason is that the Object returned by the Supplier<?> will be
>>>>> wrapped in a new Message (
>>>>> https://logging.apache.org/log4j/2.x/log4j-api/xref/org/apache/logging/log4j/spi/AbstractLogger.html#L1003),
>>>>> while the Message returned by MessageSupplier is used as is (
>>>>> https://logging.apache.org/log4j/2.x/log4j-api/xref/org/apache/logging/log4j/spi/AbstractLogger.html#L997
>>>>> ).
>>>>>
>>>>> On Saturday, 13 February 2016, <[email protected]> wrote:
>>>>>
>>>>>> Repository: logging-log4j2
>>>>>> Updated Branches:
>>>>>>   refs/heads/master 13f49fccc -> dc80330b5
>>>>>>
>>>>>>
>>>>>> Make ObjectMessage work for code like logger.traceEntry(new
>>>>>> Supplier<ObjectMessage>() { ... Tests to follow but are currently
>>>>>> mixed
>>>>>> with other changes in my local repo.
>>>>>>
>>>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>>> Commit:
>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/dc80330b
>>>>>> Tree:
>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/dc80330b
>>>>>> Diff:
>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/dc80330b
>>>>>>
>>>>>> Branch: refs/heads/master
>>>>>> Commit: dc80330b521535746969e888c4b59539a147c265
>>>>>> Parents: 13f49fc
>>>>>> Author: ggregory <[email protected]>
>>>>>> Authored: Fri Feb 12 11:13:03 2016 -0800
>>>>>> Committer: ggregory <[email protected]>
>>>>>> Committed: Fri Feb 12 11:13:03 2016 -0800
>>>>>>
>>>>>> ----------------------------------------------------------------------
>>>>>>  .../main/java/org/apache/logging/log4j/message/ObjectMessage.java  |
>>>>>> 2 +-
>>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>> ----------------------------------------------------------------------
>>>>>>
>>>>>>
>>>>>>
>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dc80330b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
>>>>>> ----------------------------------------------------------------------
>>>>>> diff --git
>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
>>>>>> index 7cffe47..ad3dba8 100644
>>>>>> ---
>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
>>>>>> +++
>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
>>>>>> @@ -98,7 +98,7 @@ public class ObjectMessage implements Message {
>>>>>>
>>>>>>      @Override
>>>>>>      public String toString() {
>>>>>> -        return "ObjectMessage[obj=" + getFormattedMessage() + ']';
>>>>>> +        return getFormattedMessage();
>>>>>>      }
>>>>>>
>>>>>>      private void writeObject(final ObjectOutputStream out) throws
>>>>>> IOException {
>>>>>>
>>>>>>
>>>>
>>>>
>>>> --
>>>> 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]>
>>>
>>
>
>
> --
> 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

Reply via email to