백/Spring, Spring Boot

[Spring] 로그 찍기, 로그 기록 만들기 로깅 유틸리티 Log4j 정의 및 구조

연지양갱 2023. 7. 5. 16:37
728x90
반응형
SMALL

교재 :

스프링 코딩 공작소

https://thebook.io/080266/0378/

 

스프링 코딩 공작소: 11.1.1 로깅 유틸리티 Log4j

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 


 

Log4j 란?

아파치 소프트웨어 라이선스에 따라 배포되는 로깅 프레임 워크

안정적, 신속성, 유연성

-> 시스템 성능에 큰 영향 X

 

즉,

선택적인 로그를 남기거나 특정 파일에 로그를 기록할 수 있는 환경을 제공

 

로그를 찍는 이유로는 디버깅 하는  방법 중에 하나이기도 하지만,

매번 그냥 로그에 찍는 것보다 발생했던 원인을 기록하고 개발자가 확인 할 수 있어야 한다.

그런 상황에 대처하기 위해서 파일이나 DB에 저장하는데 문제가 발생했을 때 자세한 상황을 파악 할 수 있게 해준다. 그래서 로깅 유틸리티는 개발자가 자세한 상황을 파악할 수 있게 하므로 개발을 테스팅할 때 빠질 수 없다.

 

 

스프링 MVC에서 로깅 유틸리티의 라이브러리를 포함해야 함

 

pom.xml 파일에 아래 코드를 추가한다

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

 


 

 

Log4j 구조

logger, appender, layout으로 구성되어 있음

 

LOGGER

로그 출력 여부 = 로깅 레벨에 따라 결정됨

여기에서 출력된 로그 정보는 다음 appender에 전달됨

 

▼ 표 11-1 Log4j의 로깅 레벨

레벨 설명
FATAL 조기 종료를 유발하는 심각한 오류가 발생한 상태를 나타냅니다.
ERROR 기타 런타임 오류 또는 예기치 않은 상태를 나타냅니다.
WARN 사용되지 않는 API 사용, API의 사용 빈도, 오류, 바람직하지 않거나 예기치 않은 런타임 상황의 경고성 메시지를 나타냅니다.
INFO 시작, 종료 같은 런타임 이벤트 메시지를 나타냅니다.
DEBUG 디버그 용도로 시스템 흐름에 대한 자세한 정보를 나타냅니다.
TRACE 가장 하위 로깅 레벨로, 모든 로그에 대한 상세한 정보를 나타냅니다.

 

▲ 그림 11-1  로깅 레벨

 

해당 로깅 레벨은 상위 레벨을 모두 출력한다.

이말은 즉

log4j 로깅 레벨이 TRACE라면 상위 레벨인 DEBUG, INFO, WARN, ERROR, FATAL 을 출력한다.

또는 INFO 레벨이라면 상위 레벨인 WARN, ERROR, FATAL을 출력한다.

 

프로그램으로부터 로깅 정보를 받아 들이는 부분이  LOGGER이다

 

 

APPENDER

전달 받은 로그 정보를 출력할 위치(파일, 콘솔, DB 등)를 결정하는 클래스

 

▼ 표 11-2 Appender의 유형

클래스 설명
ConsoleAppender 콘솔에 로그 정보를 출력합니다.
FileAppender 파일에 로그 정보를 출력합니다.
RollingFileAppender 로그 크기가 지정한 용량 이상이 되면 다른 이름의 파일로 출력합니다.
DailyRollingFileAppender 하루 단위로 로그 정보를 파일에 출력합니다.
SMTPAppender 로그 메시지를 이메일로 보냅니다.
NTEventLogAppender 윈도의 이벤트 로그 시스템에 로그 정보를 기록합니다.

 

 

로깅 정보를 여러가지 장치에 내보내는 것이 APPENDER이다.

 

LAYOUT

로그 정보의 출력 형식을 결정함

클래스 유형은 다음과 같고 단순한 텍스트 출력, 포맷을 직접 지정한 패턴, HTML 문서 형식 등을 제공

 

▼ 표 11-3 layout의 클래스 유형

클래스 설명
DateLayout 로그 정보를 날짜 중심으로 간단하게 기록합니다.
HTMLLayout 로그 정보를 HTML 형식으로 기록합니다.
PatternLayout 로그 정보를 사용자 정의 패턴에 따라 기록합니다.
• %c: 카테고리 출력
• %p: 로깅 레벨 출력
• %m: 로그 내용
• %d: 로깅 이벤트가 발생한 시간, yyyy-MM-dd, HH:mm:ss 등 시간 형식 사용
• %t: 로깅 이벤트를 발생한 스레드 이름
• %n: 개행
• %C: 클래스 이름
• %F: 로깅이 발생한 파일 이름
• %I: 로깅이 발생한 호출자 정보
• %L: 로깅이 발생한 코드 라인 수
• %M: 로깅이 발생한 메서드 이름
• %r: 애플리케이션 시작 이후부터 로깅이 발생한 시점의 시간
• %x: 로깅이 발생한 스레드와 관련된 NDC(Nested Diagnostic Context)
• %X: 로깅이 발생한 스레드와 관련된 MDC(Mapped Diagnostic Context)
SimpleLayout 로그 정보를 ‘레벨-정보’ 형식으로 간단하게 기록합니다.
XMLLayout 로그 정보를 XML 형식으로 기록합니다.

 

로깅 정보를 포멧팅하는 것이 LAYOUT이다.

 

 

 

 

 

 

 

반응형