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
