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

Remko Popma edited comment on LOG4J2-599 at 8/6/15 12:22 PM:
-------------------------------------------------------------

Perhaps not quite what Mikael had in mind (not sure about the new module) but 
the new interface is a good idea! We can introduce a new interface, say 
{{LambdaLogger extends Logger}} which has these methods that take a 
{{Callable}} lambda expression. The current {{Logger}} interface stays the same.

Client code that wants to use lambda expressions for lazy logging would look 
like this:
{code}
LambdaLogger logger = LogManager.getLambdaLogger();
logger.trace("Some expensive operation returned {}", () -> 
expensiveOperation());
{code}

That would avoid modifying any existing interface so we don't break any 
existing client code.

I would be happy to include this in a minor (2.x) version without requiring a 
major (3.0) version increment.

Thoughts?


was (Author: [email protected]):
Perhaps not quite what Mikael had in mind but his suggestion gave me a good 
idea! We can introduce a new interface, say {{LambdaLogger extends Logger}} 
which has these methods that take a {{Callable}} lambda expression. The current 
{{Logger}} interface stays the same.

Client code that wants to use lambda expressions for lazy logging would look 
like this:
{code}
LambdaLogger logger = LogManager.getLambdaLogger();
logger.trace("Some expensive operation returned {}", () -> 
expensiveOperation());
{code}

That would avoid modifying any existing interface so we don't break any 
existing client code.

I would be happy to include this in a minor (2.x) version without requiring a 
major (3.0) version increment.

Thoughts?

> Support lambda functions (or similar) for log message parameters
> ----------------------------------------------------------------
>
>                 Key: LOG4J2-599
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-599
>             Project: Log4j 2
>          Issue Type: Brainstorming
>          Components: Core
>            Reporter: Matt Sicker
>            Priority: Minor
>              Labels: Java8
>
> It would be nice if we could support 0-param lambda functions (or the 
> equivalent: interfaces with a single empty-parameter message call), or more 
> simply, allow Runnables (or something similar) to be passed which will be 
> dynamically executed if the log message is enabled.
> The use case here is that although string construction of the log message is 
> a performance issue that is already solved quite well, the problem of adding 
> in information to the log message that makes other calculations still needs 
> to be wrapped in an if check.
> I'm not sure if it'd be best to just use Runnable, or create a new interface, 
> or try to emulate how Java 1.8 lambdas work via an interface with a single 
> method defined. The details here would still need to be fleshed out, but I 
> think this sort of feature could be rather handy (especially in a Java 1.8+ 
> environment, or in Groovy/Scala/etc.).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to