2016-12-21 72 views
4

在Log4j最新的API中,我们拥有Lambda支持,可以轻松管理Debug选项。SLF4J的Lambda支持API

Example: 
logger.debug("This {} and {} with {} ", 
() -> this,() -> that,() -> compute()); 

但是对于slf4j/logback,是否有任何选项可以使lambda启用,如上所述。请让我知道语法。

回答

1

也许这样的事情会工作。您需要确定new的实例的成本是否比另一种方式更好。

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(); 
    } 
} 
1

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);