logging 로깅

호떡·2022년 12월 30일
0

로깅 logging

what

로깅(logging): 시스템에서 발생한 사건(event)을 기록하는 것
로그(log): 로깅을 통해 남겨진 기록, 유지보수에 있어 블랙박스와 같은 역할

why

유지보수 활동에 있어 매우 중요한 역할을 한다. 대표적으로는 장애의 발생을 확인하고 어떤 사건이 장애를 유발했는지 주척하는 것이 있다. 적합한 곳에 작성해둔 로그 출력 코드는 시스템 운영과 유지보수에 있어 개발자에게 동아줄이 되어 주기도 한다. 유지보수 뿐만 아니라 개발을 하며 부딪히는 많은 문제들을 디버깅 하기 위해서도 로깅을 많이 사용한다. 또한 시스템의 보안 점검과 감사(auditing)에도 로그는 아주 중요한 역할을 한다.

문제를 찾기 위해
원인을 찾기 위해
사용자 행동을 분석하기 위해
문제가 생길 수 있는 부분에 사전에 로깅 남겨두기
개발 관점에서 실행 상태를 확인하고 싶은 곳에 어떤 값이 들어오고 출력되는지 확인하기 위해

How

이제 System.out.println()은 그만 쓰자..
개발 언어와 프레임워크에 알맞은 로깅 방법을 사용하자!

  • Spring Boot: Logback, Log4j2
  • Python(Django, Flask 등): Python Logging Module
  • Node: Winston, Pino, Bunyan
  • FE: 중요 로그는 백엔드로 보내자. 또는 솔루션과 서비스(SaaS)를 적용하자

로깅 레벨을 구분하여 사용하자

  • FATAL(CRITICAL, SEVERE) > ERROR > WARN > INFO > DEBUG > TRACE
    FATAL: 큰 장애가 발생하는 상황. 시스템이 죽어갈 때...ㅠㅠ
    ERROR: 예외 같은 에러
    WARN: ERROR는 아니지만 위험한 단계
    INFO: 일상적인 수준의 정보
    DEBUG: 문제는 없지만 안에서 어떠한 동작이 일어나는지 보고 싶을 때
    TRACE: 상세한 로그
  • 개발환경에 따라 로그 출력을 구분하자
    (상세한 로그 순)
    Local 로컬환경 (TRACE) > Dev 개발환경 (DEBUG) > Test (INFO) > Prod 운영환경 (WARN | ERROR)

특성

  • 시계열(timeseries)
    대부분의 로그는 시계열 데이터의 특성을 가지고 있다. 이벤트가 발생한 시간 순서대로 되어 있다.
  • 이벤트(event)와 메시지(message): 어떠한 사건이 발생했는지를, 시스템이 어떤 상태였는지 등을 포함한다. 이 정보는 진단에 있어 필수적인 역할을 한다.
    예를 들어 예외가 발생한 상황을 기록하는 로그에는 스택 트레이스(Stack trace) 정보, 예외의 종류, 예외가 발생한 코드에서 참조하는 변수의 값 등을 출력하게 한다.
  • 로깅 레벨(level): 대부분의 로그는 이벤트의 수준 정보를 포함한다. 일상적인 수준의 정보는 INFO 레벨로 출력한다. 반면 큰 장애가 발생하는 상황이라면 FATAL 레벨로 로그를 남긴다. 개발자의 상세한 디버깅을 위한 로그라면 TRACE나 DEBUG 레벨로 출력한다.

0개의 댓글