프로그램 개발 중이나 완료 후 발생할 수 있는 오류에 대해 디버깅하거나 운영 중인 프로그램 상태를 모니터링 하기 위해 필요한 정보(로그)를 (콘솔, 파일, 데이터베이스 등에) 기록하는 것.
장점: 전체적인 app의 흐름이나 타이밍 error도 확인할 수 있다는 장점이 있다.
단점: 출력문이 들어가기 때문에 응용 프로그램 속도를 늦출 수 있고, 너무 장황해질 수 있다.(하지만 메시지 level을 나눌 수도 있다.)
Java의 주요 Logging Framework
Log4J: 몇 년 전까지 사실상 표준이었음
Logback: Log4J 개발자가 만든 Log4J 후속 버전. 현재 많은 프로젝트에서 사용되고 있다
SLJ4J: Log4J 또는 Logback과 같은 백엔드 Logger Framework의 facade pattern
SLF4J(Simple Logging Facade for Java)
log4j 또는 Logback과 같은 백엔드 Logger Framework의 facade pattern. 다양한 로깅 프레임워크에 대한 추상화레이어를 제공하는 interface의 모음이다. 추상 로깅 프레임워크이기 때문에 단독으로 사용하지 않는다. SLF4J api를 사용하면 구현체의 종류에 상관없이 일관된 로깅 코드를 작성할 수 있다. (로깅 프레임워크를 변경해도 코드를 변경하지 않아도 됨)
Logging
프로그램 개발 중이나 완료 후 발생할 수 있는 오류에 대해 디버깅하거나 운영 중인 프로그램 상태를 모니터링 하기 위해 필요한 정보(로그)를 (콘솔, 파일, 데이터베이스 등에) 기록하는 것.
Java의 주요 Logging Framework
SLF4J(Simple Logging Facade for Java)
log4j 또는 Logback과 같은 백엔드 Logger Framework의 facade pattern. 다양한 로깅 프레임워크에 대한 추상화레이어를 제공하는 interface의 모음이다. 추상 로깅 프레임워크이기 때문에 단독으로 사용하지 않는다. SLF4J api를 사용하면 구현체의 종류에 상관없이 일관된 로깅 코드를 작성할 수 있다. (로깅 프레임워크를 변경해도 코드를 변경하지 않아도 됨)
slf4j가 인터페이스이고 log4j, logback 이런것들이 구현체라고 생각하면 될듯!
SLF4J API (인터페이스)
로깅에 대한 추상 레이어(인터페이스)를 제공. 즉 로깅 동작에 대한 역할을 수행할 추상 메서드를 제공. 사용자가 이 interface를 통해 로깅 코드를 작성한다.
SLF4J 바인딩(.jar)
SLF4J 인터페이스를 로깅 구현체(Logging Framework)와 연결하는 어댑터 역할을 하는 라이브러리
SLF4J Bridging Modules
(slf4j 이외의) 다른 로깅 API로의 Logger 호출을 SLF4J 인터페이스로 연결(redirect)하여 SLF4J API에 대한 호출인것처럼 하여 대신 처리할 수 있도록 하는 일종의 어댑터 역할을 하는 라이브러리
참고 - facade pattern
여러 개의 클래스가 하나의 역할을 수행할 때, 대표적인 인터페이스만을 다루는 클래스를 두어 원하는 기능을 처리할 수 있게 도와주는 패턴이다.
출처 - https://gmlwjd9405.github.io/2019/01/04/logging-with-slf4j.html
Logback vs Log4J vs Log4J2
log4j
콘솔로 출력하는 stdout 외에도 파일 출력도 제공
xml, properties로 환경을 구성할 수 있다.
2015년에 개발이 중단되었기 때문에 기존 시스템이 아니라면 사용할 이유가 없다
logback
log4j 이후, log4j2 전에 개발된 로깅 프로그램으로 log4j에서 향상된 성능과 필터링 옵션을 제공한다
log4j2
가장 최신에 나온 로깅 프레임워크로 Apache의 log4j의 다음 버전이다.
출처 - https://minkwon4.tistory.com/161