We can deprecate MessageSupplier, but it is a shame that we added 28
methods (4 for each log level) to the Logger interface unnecessarily... :-(


On Sat, Feb 13, 2016 at 10:41 AM, Gary Gregory <[email protected]>
wrote:

> 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