로깅프레임워크
자바 로깅 프레임워크 (log4j, logback, slf4j)
@ Log4j
- log4j는 로깅을 수행하는 로깅 구현체다.
1. 주요 기능 및 특징
-
속도에 최적화되었다.
-
멀티 스레드 환경에 안전하다.
-
계층적 로그 설정 및 처리할 수 있다.
6가지의 계층적 로그 레벨
-
파일, 콘솔, 원격 서버, 이메일 등 다양한 형태로 로그를 기록할 수 있다.
단, 로그에 대한 파일 입출력시 오버헤드가 발생 할 수 있다.
-
개발 중간에 로그 설정을 변경하면, 서버를 재시작해야한다.
2. 주요 구조
-
Appender : 파일, 콘솔, 원격 서버 등 로그를 기록할 위치를 지정한다.
ConsoleAppender : 콘솔에 로그를 남긴다.
FileAppender : 파일에 로그를 남긴다.
RollingFileAppender : 로그의 크기가 일정 용량이 되면 다른 파일에 남긴다.
DailyRollingFileAppender : 하루 단위로 파일에 로그를 남긴다.
SMTPAppender : 이메일에 로그를 남긴다.
-
Layout : 기록할 로그의 패턴을 지정한다.
-
Logger : 로깅일 일어나는 부분을 그룹화하여, 필요한 그룹의 로그만 출력하도록 지정한다.
3. 로그 레벨
-
FATAL < ERROR < WARN < INFO < DEBURG < TRACE 순으로 6가지의 레벨이 있다.
-
좌측으로 갈수록 좁은 범위의 크리티컬한 로그 레벨을 의미하고, 우측으로 갈수록 넓은 범위를 로그 레벨을 의미한다.
DEBURG로 설정하는 경우, FATAL / ERROR / WARN / INFO / DEBURG 레벨의 로그들을 기록한다.
@Logback
- log4j와 마찬가지로 로깅을 수행하는 로깅 구현체다.
- logback은 log4j 개발자가 기존의 log4j를 대체하기 위해 개발한 로깅 프레임워크다.
- log4j를 토대로 만들어서 더 높은 성능과 안정성을 보장할 수 있다.
1. 주요 기능 및 특징
-
log4j보다 로그를 기록하는 속도가 빠르며 메모리 효율도 좋다.
-
이외에도 다양한 형태로 로그를 남기고, 계층적인 로그 레벨을 가진다.
log4j와 달리 5가지의 로그 레벨을 가짐.
-
개발 도중에도 로그 설정을 변경해도 서버를 재시작 하지 않아도 된다.
-
서버 중지 없이 I/O 실패에도 복구할 수 있다. (이건 뭔말인지 아직 잘 모르겠음)
2. 주요 구조
-
Appender와 Logger는 동일한데 Layout의 역할을 Encoder로 지정한다.
-
즉, logback의 주요 구조는 Appender / Encoder / Logger 등 이 있다.
3. 로그레벨
- 로그 레벨은 FATAL을 제외하고, ERROR < WARN < DEBURG < TRACE로 5단계의 레벨이 있다.
※ logback을 사용하기 위해서는 slf4j를 함께 사용해야한다.?
- logback을 만들면서 함께 slf4j를 만들었다고 하며, logback을 쓰기 위해서는 같이 써야한다고 한다. 하지만 slf4j는 따로 log4j나 다른 로깅 구현체들과 사용할 수도 있다.
@Slf4j
-
logback이나 log4j 등의 로깅 구현체 프레임워크들을 사용하는데 통일화된 인터페이스로 구현할 수 있도록 해주는 프레임워크다.
-
즉, 앞서 말한 logback이나 log4j는 로깅 구현체이고, 이들을 통일화된 방식으로 구현할 수 있도록 도와주는 것이 slf4j다.
-
따라서, 구현체의 종류에 상관없이 일관된 로깅 코드로 로깅 구현체를 구현해놓으면, 이후에 변경하거나 추가하여도 로깅 구현 코드에는 수정이 필요없다.
slf4j와 관련된 간단한 라이브러리 소개
-
slf4j-api.jar : 다양한 로깅 구현체를 통일화된 인터페이스로 구현할 수 있게 api를 제공하는 라이브러리
-
logback-core.jar : 말그대로 logback 핵심 라이브러리
-
logback-classic.jar : slf4j와 logback을 바인딩해주는 라이브러리
부가 설명 하자면, slf4j가 logback에게 로깅 처리를 호출해준다.
logback-core와 slf4j-api 디펜던시도 모두 가지고 있긴함.
-
slf4j-log4j12.jar : log4j와 slf4j를 바인딩해주는 라이브러리
마찬자기로, slf4j가 logback에게 로깅 처리를 호출해준다.
-
log4j-over-sl4f.jar : log4j의 로깅을 slf4j로 연결해주는 역할을 하는 라이브러리
기존의 프로젝트나 의존하는 외부 라이브러리에서 log4j 로깅을 직접 사용하고 있었다면, 이를 slf4j-api로 라우트 해주는 역할을 한다.
따라서, 외부 라이브러리와 같이 수정할 수 없는 부분에서 직접적으로 사용되는 log4j의 로깅을 slf4j-api로 라우트하여 실제로는 logback으로 로깅되게 해주는거다.
-
log4j-over-slf4j.jar 이외에도 jcl-over-slf4j.jar 등이 있다.
정리
-
대표적인 로깅 구현체는 log4j와 logback이 있다.
-
slf4j는 실제 로깅을 수행하는 구현체가 아니며, 다양한 로깅 구현체들을 통일된 인터페이스로 구현할 수 있도록 도와주는 중간역할이다.
-
slf4j를 통해 실제 사용할 로깅 구현체에 바인딩하는 라이브러리들로는 다음과 같다.
-
기존의 로깅 구현체 / 인터페이스를 slf4j로 라우트하여 연결된 하나의 로깅 구현체로 처리하기 위한 라이브러리는 다음과 같다.
-
jcl은 뭐냐… jcl은 흔히 알고 있는 (자카르타)commons-logging 를 말하며, slf4j 처럼 실제 로깅 처리를 하는 구현체가 아닌 인터페이스 역할을 하던 라이브러리를 말한다.
-
대표적으로 스프링의 경우 자체적으로 jcl을 이용하고 있기때문에, 이를 slf4j로 라우트하기 위해서 jcl-over-slf4j 라이브러리를 사용해야한다.
-
댓글
댓글 쓰기