1) 정의 : 프로그램 실행 중 발생하는 정보를 기록하는 행위
2) 목적 : print 대신 로깅을 사용하여 '저장' 또는 효율적인 구분(레벨)으로 유지보수에 활용
3) Spring Logging 방법
@Log4j2 활용 @Log4j2
class Controller {}
4) 주요 객체/함수
log.debug() : 개발 및 테스트 단계에서 주로 사용 log.info() : 상태 확인, 개발/운영 모두 사용 log.warn() : 경고 확인, 운영 시 사용 log.error() : 예외·에러 확인, 운영 시 사용 레벨 순서: debug < info < warn < error
@RestController
@RequestMapping("/books")
@RequiredArgsConstructor
@Log4j2 // 로그처리 어노테이션 제공
public class BookController {
// [250926 Log4j2 사용해보기]
@GetMapping("/log")
public void log(){
log.debug("테스트 과정에서 사용");
log.info("서비스의 흐름/상태에 사용");
log.warn("잠재적인 문제에 대해 사용");
log.error("예외/실패 상황에 사용");
}
// DI =========================================================
private final BookService bookService;
/** [1] 도서 대출 */
@PostMapping("/rent")
public ResponseEntity<Boolean> rentBook(@RequestBody Map<String, String> rentalInfo) {
boolean result = false;
try {
log.debug("[대여 성공] {}", rentalInfo);
result = bookService.rentBook(rentalInfo);
return ResponseEntity.ok().body(result);
} catch (RuntimeException e) {
log.debug("[대여 실패] {}", rentalInfo);
return ResponseEntity.status(405).body(result);
}
}
/** [2] 도서 반납 */
@PostMapping("/return")
public ResponseEntity<Boolean> returnBook(@RequestBody Map<String, String> rentalInfo) {
boolean result = false;
try {
result = bookService.returnBook(rentalInfo);
log.debug("[반납 성공] {}", rentalInfo);
return ResponseEntity.ok().body(result);
} catch (RuntimeException e) {
log.debug("[반납 실패] {}", rentalInfo);
return ResponseEntity.status(405).body(result);
}
}
}
log.debug() → 테스트 과정, 상세 확인용 log.info() → 서비스 상태, 주요 이벤트 기록 log.warn() → 성능 저하/잠재적 오류 경고 log.error() → 실제 예외, 오류 발생 시 기록 💡 System.out.println 대신 로그 사용하면 운영 환경에서도 안전하게 로그 관리 가능
# [3.1] 기본설정
# 스프링 기본 로그 레벨은 info
# logging.level.root = debug
logging.level.practice.practice03_250925 = debug
# [3.2] 로그 파일 처리 설정
logging.file.name = logs/app.log
# [3.3] 로그 파일 옵션
logging.logback.rollingpolicy.max-file-size = 1MB
logging.logback.rollingpolicy.max-history = 10
# [3.4] 프레임워크 내부 로그 줄이기 (운영 단계에서 warn 이상만 출력)
spring.main.log-startup-info = false
logging.level.org.springframework.boot.web=warn
logging.level.org.springframework.boot.web.embedded.tomcat=warn
logging.level.org.apache.catalina=warn
logging.level.org.apache.coyote=warn
# 일반적으로 /logs/ 폴더 및 log 파일은 git에 올리지 않음
# [3.5] log 형식 설정
# log 파일 출력 형식
logging.pattern.file = [%d{ yyyy-MM-dd HH:mm:ss }] %msg %n
# console 출력 형식
logging.pattern.console = [%d{ yyyy-MM-dd HH:mm:ss }] %level %logger %msg %n
debug 레벨 활용 → 상세 추적 warn 이상 → 불필요한 로그 줄이고 성능 확보 ⚡ 정리:
@Log4j2는 반복 코드 줄이고 손쉽게 로그 남길 수 있는 기능 제공.
로그 레벨 구분과 설정을 잘 활용하면 개발과 운영 모두에서 효율적인 로그 관리 가능.