On Fri, Feb 12, 2016 at 9:52 PM, Remko Popma <[email protected]> wrote:
> We can deprecate MessageSupplier, but it is a shame that we added 28 > methods (4 for each log level) to the Logger interface unnecessarily... :-( > Then we should deprecate all the APIs that use MessageSupplier as well, right? Gary > > > 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 >> > > -- 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
