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

Ralph Goers commented on LOG4J2-3113:
-------------------------------------

Yeah, I didn’t expect you would agree since you obviously are using 
System.Logger outside its intended purpose. But I don’t know how it could be 
more clear when it says it is for use by JDK classes and it is not a goal to be 
a general purpose API, which is what you are trying to do.

As for as Log4J supporting System.Logger, the JEP clearly says the point of it 
is to be able to route logging calls from the JDK to the logging framework of 
your choice. So Log4j’s only obligation is to support how the JDK will use the 
API, which we already do.

I suspect Gary initially thought you wanted to support the JDK’s Supplier 
interface in the Log4J API just as I did, when he asked about creating a PR.

> 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)

Reply via email to