|
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: ``` if (LOGGER.isWarnEnabled()) { LOGGER.warn("some message: {}", Json.serialize(obj)); } ```
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: ``` LOGGER.warn(formatter -> formatter.format("some message: {}", Json.serialize(obj))); ```
With the default method definition in the org.slf4j.Logger: ``` 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())); }
} ...... } ```
|