[slf4j-dev] [JIRA] (SLF4J-371) Support the lambda expression in the Logger

QOS.CH (JIRA) noreply-jira at qos.ch
Thu May 30 20:49:03 CEST 2019


    [ https://jira.qos.ch/browse/SLF4J-371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=19560#comment-19560 ] 

Robert P Thornton commented on SLF4J-371:
-----------------------------------------

The above PR does not seem adequate to support what JUL provides. It appears to only wrap individual arguments in a supplier which I think would be rarely useful. To provide parity with the JUL logging via supplier, the `org.slf4j.Logger` interface should provide operations like the following:

```java
public void error(Supplier<String> msg,);
public void error(Supplier<String> msg, Throwable t);
public void warn(Supplier<String> msg,);
public void warn(Supplier<String> msg, Throwable t);
public void info(Supplier<String> msg,);
public void info(Supplier<String> msg, Throwable t);
public void debug(Supplier<String> msg,);
public void debug(Supplier<String> msg, Throwable t);
public void trace(Supplier<String> msg,);
public void trace(Supplier<String> msg, Throwable t);
```

> Support the lambda expression in the Logger
> -------------------------------------------
>
>                 Key: SLF4J-371
>                 URL: https://jira.qos.ch/browse/SLF4J-371
>             Project: SLF4J
>          Issue Type: Improvement
>          Components: Core API
>    Affects Versions: 1.7.22
>            Reporter: MiNG
>            Assignee: SLF4J developers list
>
> In some cases, we don't want to calculate the expression for logging eagerly cause the performance reason. Then, we would write the code like the following:
> {code:java}
> if (LOGGER.isWarnEnabled())
> {
>  LOGGER.warn("some message: {}", Json.serialize(obj));
> }{code}
> Before JDK8, there is no way to encapsulate the above code, because the expression is always calculated before passed as an argument. So, many "if"s appear in the code and smell badly.
> Now, the lambda expression is supported by JDK8, the above could be simplified like following:
> {code:java}
> LOGGER.warn(formatter -> formatter.format("some message: {}", Json.serialize(obj)));{code}
> With the default method definition in the org.slf4j.Logger:
> {code:java}
> public interface Logger
> {
>  default void warn(Function<MessageFormatter, String> messageSupplier)
>  {
>   if (this.isWarnEnabled())
>   {
>    /* Calculate the expression only if the WARN level logging is enabled. */
>    this.warn(messageSupplier.apply(this.getFormatter()));
>   }
>  }
> }{code}



--
This message was sent by Atlassian JIRA
(v7.3.1#73012)


More information about the slf4j-dev mailing list