활동/호기심

로그(log) 로깅(logging) 차이점도 모르겠는데.. 라이브러리까지

ByeongJun 2023. 12. 14. 01:23
반응형

 

과거 항해 일지를 통나무에 기록했다고 하여 'log' 개념이 나왔다고 한다. 

 

 

 

로그(log)

프로그램 개발, 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링 하기 위한 텍스트 

 

즉, 무언가를 기록하는 행위다.

이러한 개념이 확장되면서 운영체제나 소프트웨어 실행 중 발생하는 정보 전반을 기록하는 파일을 의미하게 되었다. 

 

필요한 정보를 제공해주지만 계속 쌓이다보면 시스템 용량이 당연히 부족해지기 때문에 

로그가 저장되는 DB에 데이터를 어떨 때 쌓고 언제 삭제할 것인지 계획을 수립해 운영하는 것이 좋다. 

 

 

 

 

 

 

로깅

프로그램 동작시 발생하는 모든 일을 기록하는 행위

 

시스템이 작동할 때 시스템의 작동 상태의 기록, 보존, 이용자의 습성 조사및 시스템 동작 분석 등 

작동 중 일련의 사건을 시간 경과에 따라 각종 정보에 대한 기록을 만드는 행위를 로깅이라고 한다.

 

 

여기서 말하는 모든 일이란 두 가지로 나눌 수 있다.

서비스 동작 상태
  • 시스템 로딩
  • HTTP 통신
  • 트랜잭션
  • DB 요청
  • 의도를 가진 Exception
장애
  • I/O Exception
  • NullPointException
  • 의도하지 않은 Exception



 

 

 

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

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

 

 

 

누구나 처음에  System.out.println("Hello World") 를 찍어봤을텐데 

과거에 우리가 찍었던 이것이 로깅의 방법 중 하나였다고 볼 수 있다. 

(print 줄 넣기는 간단한 로그를 생성하기만 한다)

 

그러나 이런 방법으로 상용 서버에서 로그를 남기면 안 된다.

 

 

 

  1. 속도가 느려 성능상의 문제가 있다.
  2. 날짜,시간,타입(error, info, debug ...) 등 최소한의 정보가 없다.
  3. 데이터를 쌓고 남기기가 힘들다.

print() 메소드에 synchronized 키워드가 있어

멀티스레드 환경에서 다른 스레드는 Block에 걸리게 돼 

일을 할 수 없는 상태가 되기 때문에 성능 저하가 발생할 수 있다. 

 

방치해놓는 것 또한 I/O 요청이 발생할 때마다

괜한 리소스를 잡아 먹기 때문에 권고하지 않는다.

 

 

 

 

 

확장성이 용이하고 설정이 쉬운 로깅 라이브러리를 활용해야 한다.

 

로깅 라이브러리
Log4j 가장 오래된 로깅 라이브러리로써 2015년 기준으로 개발 중단
Logback  개발 중단된 Log4j 아키텍쳐 기반으로 재작성되어 출시된 로깅 프레임워크
SLF4J (Simple Logging Facade for Java 약자) Logback의 로깅 라이브러리 구현체
Log4j2 가장 최근에 등장한 라이브러리로써 Logback과 동일한 기능
Java.uti.logging JDK 1.4부터 포함된 표준 로깅API
Apache Commons logging Apache 재단의 Commons 라이브러리 중에 로그 출력을 제공하는 라이브러리

 

 

다시 한번 정리하자면! 

무조건 출력되는  System.out.-  보다 훨씬 성능 좋은 로깅 라이브러리를 사용하는 것이 좋다.

 

로깅을 사용하면 로그레벨에 따라 남기고 싶은 로그를 지정하고 출력 형식을 지정할 수 있고 

콘솔뿐만 아니라 파일이나 네트워크 등 로그를 별도의 위치에 남길 수도 있다.

 

 

 

 

 

참고

https://tecoble.techcourse.co.kr/post/2021-08-07-logback-tutorial/

https://www.youtube.com/watch?app=desktop&v=mCuaslp_7po

https://goddaehee.tistory.com/45

https://bentist.tistory.com/50

반응형