[ https://issues.apache.org/jira/browse/LOG4J2-3113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17371671#comment-17371671 ]
Gary D. Gregory commented on LOG4J2-3113: ----------------------------------------- It's going to care if you pass instances around ;-) > 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)