Dans la dernière API Log4j, nous avons un support Lambda où je peux gérer facilement l'option de débogage.
Exemple:
logger.debug("This {} and {} with {} ",
() -> this, () -> that, () -> compute());
Mais pour slf4j/logback, existe-t-il une option pour activer lambda comme mentionné ci-dessus. Veuillez alors me faire connaître la syntaxe.
Malheureusement, cela n'est pas encore pris en charge: https://jira.qos.ch/browse/SLF4J-371
slf4j-lambda prend en charge:
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);
Peut-être que quelque chose comme ça fonctionnerait. Vous devrez déterminer si le coût des instances de new
'est meilleur que de le faire d'une autre manière.
logger.debug("This {} and {} with {} ",
defer(() -> this),
defer(() -> that),
defer(() -> compute()));
Alors avec ça ...
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();
}
}