url: https://jojoldu.tistory.com/712
title: "1. 효율적으로 로그 모니터링하기 - 로그 레벨 구분하기"
description: "365/24 로 관리하는 시스템에서 로그는 굉장히 중요하다. 하지만 로그가 중요하다는 생각에 무분별하게 남기는 것은 좋지 않다. 대표적인 예로 습관적으로 예외 상황이 발생하면 ERROR 레벨로 로그를 남기는 경우이다. 보통의 서비스에서는 시간 내 에러 로그가 일정 수치 이상 쌓이면 알람을 발생시키도록 구성한다. 정상적이지 않은 모든 상황에서 전부 ERROR 레벨로 처리하게 되면 불필요하게 많은 알람들로 인해 정작 봐야할 심각한 에러 로그들도 놓칠 수 있다. 그래서 적정 수준에서 로그 레벨을 구분하여 알람 경보 수준도 구분하는 것이 필요하다. 1. 로그 레벨 로그 레벨은 해당 로그 메세지가 얼마나 중요한지를 알려주는 정보이다. 로그 레벨의 중요도는 담당 개발자가 밤에 계속 잠을 잘 수 있는지, 즉시 침대에.."
host: jojoldu.tistory.com
image: https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiZQYx%2FbtsahJPYDdD%2FY70X9UhGxwFvPMS1CxBbiK%2Fimg.png
url: https://dveamer.github.io/backend/HowToUseSlf4j.html
title: "SLF4J Logger 사용법 & 잘못된 사용법: Binding Parameters, Logging Exception Stack Trace"
description: "(이미지 출처 : http://www.slf4j.org/)Logger의 잘못된 사용법은 어플리케이션의 성능에 큰 영향을 줍니다.이러한 문제는 개발 과정 중에는 발견되지 않으며 성능 테스트에서야 발견이 가능합니다.성능 테스트 케이스에서 누락된 경우, 운영 중에 많은 부하를 받게 되었..."
host: dveamer.github.io
image: https://dveamer.github.io/images/logo_white.png
url: https://loosie.tistory.com/829
title: "[Spring] 스프링 부트에서 로그(Log) 사용하기 - Logback (Sync, AsyncAppender)"
description: "스프링 부트에서 Logback 사용하기 스프링 부트에선 기본적으로 Logback이 설정되어 있다. 다음과 같이 spring-boot-starter-logging 라이브러리에 기본적으로 설치되어 있어서 SLF4J의 3가지 모듈이 Logback과 연결된다. Controller에 로그 API를 작성하여 기본적으로 로깅이 뭔지 모두 호출해보자. /** * trace < debug < info < warn < error * default : info */ @RestController public class FooController { private final Logger log = LoggerFactory.getLogger(this.getClass().getSimpleName()); @GetMapping(\"/\").."
host: loosie.tistory.com
image: https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwcGYt%2FbtrCvDUEj0G%2Fc5MdMeY3urhXiWYypknuD0%2Fimg.png

1. 애플리케이션 시작 및 종료

  • 애플리케이션이 시작할 때와 종료할 때 로그를 남겨서 상태를 추적합니다.

java

logger.info("애플리케이션 시작 중...");

2. 주요 비즈니스 로직

  • 서비스 메서드나 중요한 비즈니스 로직의 시작과 끝에서 로그를 남깁니다. 이를 통해 프로세스 흐름을 추적할 수 있습니다.

java

logger.debug("사용자 등록 중: {}", user);

3. 예외 처리

  • 예외가 발생했을 때 로그를 남겨 원인을 추적할 수 있도록 합니다. 예외 메시지와 스택 트레이스를 포함합니다.

java

try {
    // 코드
} catch (Exception e) {
    logger.error("오류 발생: {}", e.getMessage(), e);
}

4. 데이터베이스 쿼리

  • 데이터베이스와의 상호작용에서 쿼리 실행 전후에 로그를 기록하여 성능을 모니터링합니다.

java

logger.info("DB 쿼리 실행 중: {}", query);

5. 외부 API 호출

  • 외부 API를 호출할 때 요청과 응답에 대한 로그를 남겨서 통신 상태를 확인합니다.

java

logger.info("API 호출: {}", apiUrl);
logger.debug("API 응답: {}", response);

6. 사용자 행동

  • 사용자의 중요한 행동(예: 로그인, 로그아웃, 데이터 수정 등)을 기록하여 보안 및 분석에 활용합니다.

java

logger.info("사용자 {}가 로그인했습니다.", username);

7. 성능 모니터링

  • 특정 작업의 수행 시간을 측정하고 로그를 남겨 성능을 분석합니다.

java

long startTime = System.currentTimeMillis();
// 작업 수행
long endTime = System.currentTimeMillis();
logger.info("작업 수행 시간: {}ms", (endTime - startTime));

8. 설정 변경

  • 애플리케이션의 중요 설정이 변경될 때 로그를 남겨 변경 이력을 추적합니다.

java

logger.info("설정 변경: {}", newSettings);

9. 경고 및 비정상 상태

  • 비정상적인 상태나 경고가 발생했을 때 로그를 남겨 문제를 조기에 발견할 수 있도록 합니다.

java

logger.warn("메모리 사용량이 80%를 초과했습니다.");

결론

적절한 위치에 로그를 남기는 것은 애플리케이션의 상태를 파악하고 문제를 해결하는 데 큰 도움이 됩니다. 로그의 레벨을 적절히 조정하고, 필요할 때만 로그를 남기도록 하여 로그 파일의 크기를 관리하는 것도 중요합니다.e