시작이 반

로깅(Logging)이란? 본문

Programming/기타

로깅(Logging)이란?

G_Gi 2022. 6. 7. 21:51
SMALL

어플리케이션을 운영하던 도중에 장애가 발생, 잘못된 접근, 사용자의 악의적인 행위, 예상치 못한 작동 등과 같이 문제가 발생했을 경우, 문제의 원인을 파악해야 한다. 이를 위해서 날짜, 시간, 서비스, 로직 등에 대한 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생하거나 중요한 기능들이 실행되는 부분에서는 로그(log)를 남기는 것이 필요하다.

 

Log의 사전적 의미

로그의 사전적 의미는 "무언가를 기록하는 행위"이다. 이러한 파일을 모아 놓은 것이 Log파일이라고 한다.

 

 

로깅(Logging)이란?

  • 정보를 제공하는 일련의 기록인 로그(Log)를 생성하도록 시스템을 작성하는 활동.
  • 프린트 줄 넣기는 간단한 로그를 생성하기만 한다.
  • 버그에 대한 유용한 정보를 제공할 수 있다.
  • 성능에 관한 통계와 정보를 제공할 수 있다.

로그를 출력하는 방법에는 2가지가 존재한다.

  1. System.out.println()
  2. 로깅(Logging) 라이브러리

 

System.out.println()

우리는 Java를 처음 배울때 기록하는 기능인 System.out.println() 을 배웠을 것이다. 하지만 이런 기능은 시스템을 운영하는 데에 있어서 적절하지 않다. 왜 정보를 System.out.println()으로 남기지 않는 것일까?

  1. 성능상의 문제 - 속도가 너무 느리다.
  2. 최소한의 정보가 없다. - 날짜/시간/타입(error, info, debug...) 등과 같은 정보가 기본적으로 없다.
  3. 콘솔창에 출력만 하기 때문에 나중에 다시 확인할 수 가 없다.
  4. 데이터를 쌓고 남기기 힘들다.

이러한 이유로 System.out.println() 으로 로그를 남기는 것은 상용서버에서는 하면 안된다.

 

로깅(Logging) 라이브러리

로그는 주로 로깅 라이브러리를 이용하여 남긴다. 최소한의 정보(날짜/시간/타입 등)가 제공된다. 데이터를 서버에 저장하고 파일화가 가능하다.

  • Java.uti.logging - JDK 1.4부터 포함된 표준 로깅API (기능이 부족하다)
  • Apache Commons logging - 아파치 재단의 Commons 라이브러리 중에 로그 출력을 제공하는 라이브러리
  • Log4j - 가장 오래된 로깅 프레임워크이다. 2015년 기준으로 개발이 중단되었다.
  • Logback - log4j이후 출시된 로깅 프레임워크이다. logback은 Springboot의 spring-boot-starter-web안에 spring-boot-starter-logging의 logback이 포함되어 있다.
  • Log4j2 - 가장 최근에 등장, Logback와 같은 기능을 가지고 있다.

slf4j

Simple Logging Facade For Java 의 약자로 logger 추상체이다. logback이나 log4j와 같은 프레임워크의 인터페이스 역할을 해준다. log4j를 사용하다가 log4j2를 교체하면 많은 코드 수정이 발생하는데 이러한 점을 고려해서 slf4j를 사용하고 log4j를 연결하여 사용하면 이후에 수정이 쉽다.

 

 

Log Level

로그 레벨은 6단계가 있다.

TRACE > DEBUG > INFO > WARN > ERROR > FATAL

 

TRACE: DEBUG보다 상세한 정보 -> 개발시에 필요하고 DEBUG로 대체 가능하다.

DEBUG: 프로그램 디버깅

INFO: 상태변경과 같은 정보성 메시지

WARN: 처리 가능한 문제, 향후 문제가 될수 있는 것 -> INFO레벨로 대체 가능하다.

ERROR: 요청 처리중 문제

FATAL: 아주 심각한 에러, 어플리케이션 작동 불가 -> ERROR레벨로 대체 가능하다.

 

 

마지막으로...

로그는 필요한 정보를 제공해준다. 하지만 이러한 정보를 계속 쌓으면 시스템 용량이 부족해질 것이다. 때문에 로그가 저장되는 DB에 데이터를 언제 삭제할 것인지 계획을 수립하고 운영해야한다.

 

 

 

 

 

 

참고

LIST

'Programming > 기타' 카테고리의 다른 글

Sync, Async, Blocking, Non-Blocking  (0) 2022.11.13
Redis(Remote Dictionary Server)  (0) 2022.08.17
싱글턴 패턴(Singleton pattern)  (0) 2021.02.18
[IntelliJ ] 단축키  (0) 2021.01.19
MVC 디자인 패턴  (0) 2021.01.09