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

QOS.CH (JIRA) noreply-jira at qos.ch
Fri Jun 21 18:22:05 CEST 2019


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

Dean Hiller commented on SLF4J-371:
-----------------------------------

@Federico sorry, it is a logback feature so you can't reproduce.  it is an AWESOME feature when doing development.  Webpieces uses this pattern

<pattern>%date\{ISO8601} [%X\{txId}-%X\{user}] [%thread] %caller\{1..2} %-4level: %message%n</pattern>

The %caller\{1..2} is very special and breaks down when using a wrapper like slf4j-fluent.  That little bit inserts a 'clickable' link in the IDE's logging like so 

"at org.webpieces.plugins.hibernate.TransactionFilter.filter(TransactionFilter.java:47)"

and it's sick while developing as I can click on ANY log statement and it takes me right to the log statement BUT only for people using the wrapper and we all know too many 3rd party jars are not using the wrapper so it only half works now :(.  

 

@ceki oh, crap!!! I didn't know that was out.  I will have to try that out!  thanks.

> 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
>             Fix For: 2.0
>
>
> 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