You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Gary D. Gregory (Jira)" <ji...@apache.org> on 2021/06/28 12:44:00 UTC

[jira] [Commented] (LOG4J2-3113) Support Supplier<> in varargs log message parameters

    [ https://issues.apache.org/jira/browse/LOG4J2-3113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17370573#comment-17370573 ] 

Gary D. Gregory commented on LOG4J2-3113:
-----------------------------------------

Note that this is currently supported via a custom supplier, implemented before we moved to Java 8. It would be nice to support standard and Java 8 suppliers of course.

> Support Supplier<> in varargs log message parameters
> ----------------------------------------------------
>
>                 Key: LOG4J2-3113
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3113
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: API
>    Affects Versions: 2.14.1
>            Reporter: Markus Spann
>            Priority: Minor
>
> It would be very useful, to give special treatment to message parameters of type {{java.util.function.Supplier<T>}} by calling {{get()}} rather than {{toString()}} on it while creating the log message.
> Message parameters (i.e. method calls that return the parameter) that are expensive to compute can thus be computed lazily.
> What's more, the logging call reads more naturally just like all other logging calls that use wildcards and parameters.
> {code:java}
> java.lang.System.Logger logger = System.getLogger("toto");
> // already supported style using a single Supplier
> logger.log(Level.DEBUG, () -> "Contents of array: " + Arrays.deepToString(array));{code}
> {code:java}
> // compiles but calls toString() rather than Supplier.get()
>  logger.log(Level.DEBUG, "Contents of array: {}", (Supplier<String>) () -> Arrays.deepToString(array));{code}
> I've looked through the log4j2 Jira and found issue LOG4J2-599 in which a similar request was previously discussed without actually adding the feature to log4j2.
> (Note: Strangely Java requires the cast to (Supplier<String>).)
> My suggestion is to add Supplier support by enhancing method {{org.apache.logging.log4j.util.StringBuilders.appendSpecificTypes()}}.
> I will provide a Pull Request if you agree to the enhancement.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)