Written by
Sunwoo Han
on
on
스프링 MVC 기본 기능
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 공부하고 정리하는 포스트입니다.
로깅 간단히 알아보기
로그(log)??
- 기록을 남기는 것
- 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링하는 정보를 기록
- 기록 데이터를 분석하여 다양한 통계에 사용할 수 있음
- 운영 시스템에서는
System.out.println()
같은 시스템 콘솔을 출력하지 않고 별도의 ‘로깅 라이브러리’를 사용 - ‘스프링 부트 라이브러리’를 사용하면
스프링 부트 로깅 라이브러리(spring-boot-starter-logging)
이 포함됨
로깅 라이브러리
설명
스프링 부트 로깅 라이브러리(spring-boot-starter-logging)
가 사용하는 기본 로깅 라이브러리Slf4j
: 다양한 로깅 라이브러리를 통합해서 인터페이스로 제공하는 것Logback
: 실제 로깅 라이브러리의 구현체 역할
(실제 실무에서도 기본적으로 적용하는Slf4j
+Logback
조합을 대부분 사용)
특징
Log Level
- Log Level
- ERROR : 요청을 처리하는 중 오류가 발생한 경우
- WARN : 처리 가능한 문제이지만, 향후 시스템 에러의 원인이 될 수 있는 경우
- INFO : 로그인이나 상태 변경과 같은 정보성 메시지
- DEBUG : 개발 시 디버깅 목적으로 출력
- TRACE : DEBUG 레벨보다 좀 더 상세한 메시지
- 로그의 출력 레벨은 5가지로 존재
- 개발 단계에서는 주로 DEBUG (혹은 그 위)
- 운영 단계에서는 주로 INFO (혹은 그 위)
- DEBUG 지정 -> DEBUG / INFO / WARN / ERROR 모두 출력
- INFO 지정 -> INFO / WARN / ERROR 모두 출력
- Log Level 설정은
application.properties
에서 가능- 기본 전체 log level은 info로 설정되어 있음
# 전체 로그 레벨 설정 (default = info)
logging.level.root=info
# 특정 패키지 로그 레벨 설정
logging.level.hello.springmvc=debug
올바른 사용법
+
을 통해 문자열을 조합해서 출력하는 것은+
연산이 먼저 수행된 후 출력 여부를 결정- 출력하지 않아도 연산을 수행하기 때문에 비용이 발생 ->
+
연산을 통한 출력 대신{}
라는 치환문자를 통해서 출력해야 함
- 출력하지 않아도 연산을 수행하기 때문에 비용이 발생 ->
# 올바르지 못한 방법
log.info("info log = " + info);
# 올바른 방법
log.info("info log = {}", info);
사용
Logger 가져오기
-
직접 가져오기 :
private final Logger log = LoggerFactory.getLogger(getClass());
-
@Slf4j
사용 : 롬복의@Slf4j
를 사용하면 바로 log라는 이름으로 logger를 사용할 수 있음
Log 찍기
장점
- 쓰레드 정보 / 클래스 이름 같은 부가 정보를 함께 볼 수 있으며, 출력 모양 조정 가능
- 로그 레벨에 따라 상황에 맞춰 로그 출력 가능
- 개발 서버 -> 모든 로그 출력
- 운영 서버 -> 로그 출력 X
- 콘솔 뿐만 아니라 파일 / 네트워크 등 로그를 별도의 위치에 남길 수 있음
- 특히, 파일로 남길 때에는 일별 / 특정 용량에 따라 로그를 분할 할 수도 있음
- 성능도
System.out
보다 좋음- 내부 버퍼링 / 멀티 쓰레드 등등
Comments
SPRING 의 다른 글
-
스프링 타입 컨터버 24 Jun 2022
-
API 예외 처리 17 Jun 2022
-
예외 처리와 오류 페이지 12 Jun 2022
-
로그인 처리 - 인터셉터 08 Jun 2022
-
로그인 처리 - 필터 06 Jun 2022
-
로그인 처리 - 쿠키, 세션 31 May 2022
-
Bean Validation 22 May 2022
-
검증 22 May 2022
-
메시지, 국제화 21 May 2022
-
타임리프 - 스프링 통합과 폼 19 May 2022
-
타임리프 - 기본 기능 10 May 2022
-
스프링 MVC 기본 기능 - 웹 페이지 만들기 02 May 2022
-
스프링 MVC 기본 기능 - HTTP 응답 30 Apr 2022
-
스프링 MVC 기본 기능 - HTTP 요청 24 Apr 2022
-
스프링 MVC 기본 기능 - 요청 매핑 19 Apr 2022
-
스프링 MVC 기본 기능 19 Apr 2022
-
스프링 MVC 구조 이해 14 Apr 2022
-
MVC 프레임워크 만들기 - V4, V5 12 Apr 2022
-
MVC 프레임워크 만들기 - V1, V2, V3 09 Apr 2022
-
서블릿, JSP, MVC 패턴 05 Apr 2022
-
서블릿 29 Mar 2022
-
웹 애플리케이션 이해 24 Mar 2022
-
스프링 웹 계층이란? 05 Nov 2021
-
스프링 시큐리티 공식문서 번역 27 Sep 2021
-
스프링 AOP 총정리 : 개념, 프록시 기반 AOP, @AOP 27 Apr 2021
-
SpEL (스프링 Expression Language) 25 Apr 2021
-
데이터 바인딩 추상화 : Converter와 Formatter 21 Apr 2021
-
데이터 바인딩 추상화 : PropertyEditor 12 Apr 2021
-
Validation 추상화 10 Apr 2021
-
Resource 추상화 08 Apr 2021
-
IoC 컨테이너 9부 07 Apr 2021
-
IoC 컨테이너 8부 06 Apr 2021
-
IoC 컨테이너 7부 02 Apr 2021
-
IoC 컨테이너 6부 29 Mar 2021
-
IoC 컨테이너 5부 27 Mar 2021
-
IoC 컨테이너 4부 23 Mar 2021
-
IoC 컨테이너 3부 20 Mar 2021
-
IoC 컨테이너 2부 18 Mar 2021
-
IoC 컨테이너 1부 12 Mar 2021
-
스프링 PSA 07 Jan 2021
-
스프링 @AOP 실습 07 Jan 2021
-
프록시 패턴 06 Jan 2021
-
스프링 AOP 04 Jan 2021
-
의존성 주입(Dependency Injection) 04 Jan 2021
-
스프링 빈(Bean) 02 Jan 2021
-
스프링 IoC 컨테이너 01 Jan 2021
-
스프링 IoC 01 Jan 2021