2017-12-29 49 views
0

우리의 전통적인 방법을 수행하는 기능 인터페이스와 람다 식을 사용하는 것입니다 :자바 - 로깅을 기록 할

if (logger.isDebugEnabled()) { 
    logger.debug("something to log, and barbarbar {}", object); 
} 

하지만 코드와 복잡한 선을 줄이기 위해 로깅을 수행하는 람다 식을 사용하는 방법에 대한?

logger.debug(() -> return "something to log, and barbarbar " + object); 

SLF4J 또는 다른 로거 로깅을 할 수있는이 방법을 제공하지 않는 이유가 있나요? 개체 생성 오버 헤드가 발생 했습니까?

+0

람다 식은 무료가 아닙니다. 그들은 메모리 공간도 차지합니다. 이 게시물에는 가질 수있는 부작용을 보여주는 몇 가지 의견과 답변이 있습니다. https://stackoverflow.com/questions/47682777/why-bother-using-lambda-expressions-in-logging-apis-if-the-compiler-can- 가능성/47701408 # 47701408 – tsolakp

+0

맞아,이 메모리 사용량을 늘리십시오 ... BTW 비용이 적게 들고 객체 생성 비용을 무시할 수 있다고 생각합니다. https://stackoverflow.com/questions/3485844/object-creation -in-java-is-slow/3485895 # 3485895 –

답변

1

로깅이 수행하는 우리의 전통적인 방법 ...

모든 사용 사례에 조건 logger.isXXXXEnabled()를 사용하는 의무가 아닙니다. 생성하는 데 상당한 시간이 걸리는 개체를 기록 할 때만 사용하기위한 것입니다. 예를 들어, 일부 DB 쿼리 나 XML/JSON으로 변환 된 복잡한 구조의 결과를 로그에 넣어야하는 경우

다른 경우에는이 체크가 과도합니다.

+0

오해의 소지가있는 문장을 죄송합니다. "코드 줄이기와 복잡성 줄이기" –