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 >
