Log4jの最新のAPIには、デバッグオプションを簡単に管理できるLambdaサポートがあります。
例:
logger.debug("This {} and {} with {} ",
() -> this, () -> that, () -> compute());
ただし、slf4j/logbackには、上記のようにラムダを有効にするオプションがあります。構文を教えてください。
残念ながら、これはまだサポートされていません: https://jira.qos.ch/browse/SLF4J-371
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);
多分このようなものがうまくいくでしょう。 new
ingインスタンスのコストが別の方法よりも優れているかどうかを判断する必要があります。
logger.debug("This {} and {} with {} ",
defer(() -> this),
defer(() -> that),
defer(() -> compute()));
次にこれで...
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();
}
}