Sou*_*vik 21 java logback slf4j
在Log4j最新的API中,我们有Lambda支持,可以轻松管理Debug选项.
例:
logger.debug("This {} and {} with {} ",
() -> this, () -> that, () -> compute());
Run Code Online (Sandbox Code Playgroud)
但是对于slf4j/logback,有任何选项可以启用lambda,如上所述.那么请让我知道语法.
Version 2 of SLF4J has support for lambda syntax.
This new version also brings a fluent API. Version 2 requires Java 8 or later.
As of 2020-06, version 2 is still in the experimental/unstable phase, with the most recent alpha release being from 2019-10.
Maven POM setting:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
See the Download page.
slf4j-lambda支持:
import kr.pe.kwonnam.slf4jlambda.LambdaLogger;
import kr.pe.kwonnam.slf4jlambda.LambdaLoggerFactory;
LambdaLogger log = LambdaLoggerFactory.getLogger(YourClass.class);
// lambda for message itself
log.debug(() -> createMessage("debug level"));
// lambda for message format's arguments
log.info("info lambda formatter number {}, string {}", () -> 123, () -> "Hello LambdaLogger");
// method reference
public String longRunnigMethod() {
return "some long running method";
}
log.debug("Long running method logging {}", this::longRunnigMethod);
// exception logging
log.error(() -> "error lambda exception msg - " + ex.getMessage(), ex);
Run Code Online (Sandbox Code Playgroud)
也许这样的事情会起作用。您需要确定new实例的成本是否比其他方式更好。
logger.debug("This {} and {} with {} ",
defer(() -> this),
defer(() -> that),
defer(() -> compute()));
Run Code Online (Sandbox Code Playgroud)
那么有了这个...
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(staticName = "defer")
public class LogString {
@NonNull private final StringGenerator generator;
@Override
public String toString() {
return generator.createString();
}
public interface StringGenerator {
String createString();
}
}
Run Code Online (Sandbox Code Playgroud)