답변:
네 그렇습니다. SLF4J 와 같은 로깅 파사드를 사용하면 사용자에게 특정 로깅 프레임 워크에 부담을주지 않으면 서 유연성을 얻을 수 있습니다.
광범위하게 배포 된 구성 요소 및 라이브러리 작성자는 구성 요소 또는 라이브러리의 최종 사용자에게 로깅 프레임 워크를 부과하지 않기 위해 SLF4J 인터페이스에 대해 코딩 할 수 있습니다. 따라서 최종 사용자는 클래스 경로에 해당 slf4j 바인딩을 삽입하여 배포시 원하는 로깅 프레임 워크를 선택할 수 있습니다. 클래스 경로에서 기존 바인딩을 다른 바인딩으로 바꾸고 응용 프로그램을 다시 시작하여 나중에 변경할 수 있습니다. 이 접근 방식은 간단하고 매우 강력합니다.
또한 사용자가 SLF4J jar을 포함하지 않은 경우 ( 사용자 안내서의 ) :
SLF4J 버전 1.6.0부터 클래스 경로에 바인딩이 없으면 slf4j-api는 기본적으로 모든 로그 요청을 삭제하는 비 작동 구현으로 설정됩니다.
로깅의 성능 영향에 대해 우려되는 경우이 SLF4J FAQ 항목을 확인하십시오 . 아이디어는 문자열 인라인에 명령문을 추가하는 대신 명령문을 로그하는 매개 변수를 제공한다는 것입니다.
다음 두 줄은 정확히 동일한 출력을 산출합니다. 그러나 두 번째 양식은 사용 불가능한 로깅 명령문의 경우 첫 번째 양식보다 30 배 이상 성능이 우수합니다.
logger.debug("The new entry is "+entry+"."); logger.debug("The new entry is {}.", entry);
SLF4J는 개념적으로 JCL과 매우 유사합니다. 따라서 또 다른 벌목 정면으로 생각할 수 있습니다. 그러나 SLF4J는 디자인이 훨씬 단순하고 더 강력합니다. 간단히 말해서 SLF4J는 [Jakarta Commons Logging]을 괴롭히는 클래스 로더 문제를 피합니다.
예 , 라이브러리 코드에서 로그해야합니다. 개발에 도움이 될뿐만 아니라 라이브러리를 사용하는 사람들이 유용하게 사용할 수 있습니다. 필요한 로그 문만 표시하도록 항상 로깅 수준을 설정할 수 있으며 동일한 수준을 수행 할 수 있습니다.
최근 에는 오픈 소스 ORM 도구 인 Mybatis 를 사용하고 있었습니다 . 올바른 것으로 생각되는 쿼리가 결과를 반환하지 않는 문제를 디버깅했습니다. 매개 변수가있는 쿼리였으며 Mybatis가 라이브러리 코드 내에 로깅했기 때문에 쿼리를 켜고 실제 쿼리가 실행되는 것을 볼 수있었습니다. 두 개의 매개 변수를 바꾸 었다는 것을 쉽게 알 수있었습니다. 라이브러리에 로그인하지 않으면 문제를 거의 빨리 찾을 수 없었습니다.