일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코딩교육봉사
- java
- 회고
- MYSQL
- programmers
- kotlin
- 코틀린
- 공부일지
- BFS
- 시나공
- CJ UNIT
- 백준
- 문제풀이
- 백준 알고리즘
- 자바
- 1과목
- 코딩봉사
- SW봉사
- softeer
- python
- 데이터베이스
- C++
- 백준알고리즘
- 파이썬
- 소프티어
- 스프링
- 정보처리산업기사
- 알고리즘
- SQL
- 프로그래머스
- Today
- Total
JIE0025
[Spring] 로깅 (Logging) 본문
✅ 개요
프로그램을 만들어 잘 동작하는지 확인하려고
System.out.println()도 많이 썼다.
또 디버깅을 통해 데이터의 흐름도 볼수있었다.
이런것들은 다 로그의 하나로 볼수있다.
그럼 로깅은 뭘까? 로깅은 운영중인 웹 어플리케이션의 문제 발생시- 원인을 파악하기 위한 정보를 의미한다.
배포환경에서도 잘 되는지 확인하기 위해 결국 로깅을 알아야한다.
✅ 로깅이란?
프로그램동작시 발생하는 모든 일을 기록하는 행위
⏺ 모든 일 :: 개발자가 가져야하는 최소한의 목적
✔️ 서비스의 동작상태 확인
- 시스템로딩
- http통신
- 트랜잭션
- db 요청
- 의도를 가진 Exception
✔️ 장애
- i/o exception
- nullpointerexception...
⏺ 로그의 장점
- 출력형식 지정가능
- 로그레벨에 따라 남기고싶은 로그를 별도 지정가능
- 콘솔뿐 아니라 파일, 네트워크 등 별도의 위치에 남길 수 있음
- 실제 서비스에선 로깅 프레임워크가 사용된다.
⏺ 로깅하는방법
- System.out.println()
- 로그 라이브러리/프레임워크 >>> 확장 용이/ 쉬운 설정
- java.util.logging
- JDK 1.4부터 포함된 표준 로깅 API
- 별도 라이브러리 추가 불필요
- 기능이 많이 부족해 다른 로그 라이브러리를 많이 사용
- Apache Commons logging
- 아파치 재단의 Commons 라이브러리 중에 로그 출력을 제공하는 라이브러리
- Log4j
- 아파치 제단에서 제공하며 가장 많이 사용되는 로깅 라이브러리
- Logback
- Log4j를 개발한 Ceki Gulcu가 Log4j의 단점 개선 및 기능을 추가하여 개발한 로깅 라이브러리
- Slf4j의 구현체로 Spring Boot에서는 spring-boot-starter-logging안에 기본적으로 포함되어 있어서 따로 dependency를 추가하지 않고 사용 가능
- java.util.logging
SLF4J(Simple Logging Facade for Java)
많은 로그 라이브러리를 통합적인 인터페이스로 제공

- 다양한 로깅 프레임웍을 같은 API를 사용해서 접근할 수 있도록 해주는 추상화 계층
- 실무에서는 Logback을 대부분 사용한다고 한다.
- 왜냐면!? 위에서도 언급했듯 스프링 부트에서는 기본적으로 SLF4J, Logback을 채택하고 있기 떄문
✅ 로그의 레벨
TRACE > DEBUG > INFO > WARN > ERROR > FATAL
✔️ 개발자가 의도하지 않은 예외
FATAL: 아주 심각한 에러, 어플리케이션 작동 불가 (프로그램 종료되는 경우가 많음) -> ERROR레벨로 대체 가능하다.
ERROR: 요청 처리중 문제 (의도하지 않은 에러발생- 프로그램이 종료되지는 않는다.)
------------------------------------------------------------------------
✔️ 의도한 예외
WARN: 에러가 될 수 있는 잠재적 가능성 있음 // 처리 가능한 문제, 향후 문제가 될수 있는 것 -> INFO레벨로 대체 가능
INFO: 상태변경과 같은 정보성 메시지 *명확한 의도가 있는 에러, 요구사항에 따라 시스템 동작을 보여줄 때
DEBUG: 프로그램 디버깅 (Info보다 더 자세한 정보가 필요한 경우)
TRACE: DEBUG보다 상세한 정보 -> 개발시에 필요하고 DEBUG로 대체 가능 > 개발 환경에서 버그를 해결하기 위해 사용함

✅ 로그 사용방법
Spring boot에서는 기본적으로 로그 설정이 되어있어서 application.yml(properties)에도 설정이 가능
- 기본 레벨은 INFO 레벨로 설정되어 있다.
- root : 전체 범위 레벨 설정
- 패키지별로도 레벨 범위 설정 가능 (아래사진 참조)
⏺ lombok의 @Slf4j 어노테이션 사용 (자동으로 설정된 log 객체를 사용)

⏺ Simple Logging Facade for Java (SLF4J)
인터페이스 역할 (추상로깅프레임웤이라 단독으로 사용불가능, 최종 사용자가 배포시 원하는 구현체를 선택)
SLF4J를 사용하는 클라이언트에선 실제 구현을 몰라도 된다. (OCP/개방폐쇄, DIP/의존관계역전)
개발할 때 : SLF4J API 를 사용해 로깅 코드 작성
배포할 때 : 바인딩된 logging framework가 실제 로깅코드 수행
Bridge, SLF4J API, Binding 모듈을 통해 수행될 수 있다.

사용방법은 여기에 아주 잘 나와있으니 나중에 사용할 일이 있으면 참고하자 ^^
https://livenow14.tistory.com/63
[Logging] SLF4J란?
블로그를 작성하고, 테코톡을 진행했어요. 더 쉽게 이해하고 싶다면 아래 영상을 시청해주세요! [10분 테코톡] ☂️ 검프의 Logging(로깅) #1 SLF4J(Simple Logging Facade for Java)는 이름에서 확인할 수 있듯
livenow14.tistory.com
++ 로그는 필요한 정보를 제공해주지만 계속 쌓다보면 시스템 용량이 부족해짐!
따라서 로그가 저장되는 DB에 데이터를 언제 삭제할 것인지 계획을 수립하고 운영해야함
References
https://livenow14.tistory.com/63
'Application > Spring, SpringBoot, JPA, Webflux' 카테고리의 다른 글
[개선] 엔티티에 사용되었던 무분별한 어노테이션 개선 과정 (0) | 2023.01.02 |
---|---|
[리팩토링] EntityManager → QueryDSL을 이용한 getCategories (2) | 2022.12.22 |
[Springboot][개발] FLAG - Category CRUD 1차 완성 (Merged) (1) | 2022.12.21 |
[Springboot][개발] FLAG - Category CRUD 1차 초안 작성 (0) | 2022.12.17 |
[설계] Category ERD, Request URI, 임시데이터 생성 (0) | 2022.12.16 |