Spring MVC - 로깅, 로그 사용
로그란?
- 프로그램 개발이나 운영시에 발생하는 문제점 파악 및 모니터링을 위해서 기록을 남기는 것
- 기록 데이터를 분석하여 통계에 사용할 수 있음
- 운영 시스템에서는
System.out.println()
같은 시스템 콘솔을 사용해서 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용 - 스프링 부트 라이브러리에는 스프링 부트 로깅 라이브러리가 포함됨
로깅 라이브러리
Sl4J
:Logback, Log4j, Log4J2
등 많은 로그 라이브러리를 통합해서 인터페이스로 제공해주는 라이브러리- Logback : 실제 로그 라이브러리의 구현체
특징
- 로그 레벨
- ERROR : 요청을 처리하는 중 오류가 발생한 경우
- WARN : 처리 가능한 문제이지만, 향후 에러의 원인이 될 수 있는 경우
- INFO : 로그인이나 상태 변경과 같은 정보성 메시지
- DEBUG : 개발 시 디버깅 목적으로 출력
- TRACE : DEBUG레벨 보다 좀 더 상세한 메시지
- 출력 레벨:
TRACE
>DEBUG
>INFO
>WARN
>ERROR
- EX1) 출력 레벨을 INFO로 지정 →
INFO
/WARN
/ERROR
모두 출력 - EX2) 출력 레벨을 TRACE로 지정 →
TRACE
/DEBUG
/INFO
/WARN
/ERROR
- 로그 레벨 설정 : application.properties에서 설정
# 전체 로그 레벨 설정 (기본 info)
logging.level.root=info
# 특정 패키지 로그 레벨 설정 (#hello.springmvc 패키지와 하위 로그 레벨 debug 설정)
logging.level.hello.springmvc=debug
로그사용의 장점
- 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양 조정 가능
- 로그 레벨에 따라서 서버상황에 맞게 로그 출력 가능
- 개발 서버 → 모든 로그 출력
- 운영 서버 → 최소한의 로그 출력
- 로그를 파일, 네트워크 등 별도의 위치에 저장 가능
→ 파일로 남길때는일별 / 지정한 용량
에 따라 로그 분할 가능 - 성능이
System.out
보다 좋다 → 내부 버퍼링 / 멀티 쓰레드 등
사용방법
log.debug("data={}", data)
로그 사용 예시 코드
//@Sl4j
@RestController
public class LogTestController {
//로거 멤버변수는 롬복이 제공하는 @Sl4j로 대체 가능
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest() {
String name = "Spring";
System.out.println("name = " + name);
log.trace("trace log{}", name);
log.debug("debug log{}", name);
log.info("info log = {}", name);
log.warn("warn log = {}", name);
log.error("error log = {}", name);
//로그를 사용하지 않아도 a+b 계산 로직이 먼저 실행 되므로 좋지 않은 사용 방법
log.debug("String concat log=" + name);
return "ok";
}
}
반응형