과거 항해 일지를 통나무에 기록했다고 하여 'log' 개념이 나왔다고 한다.
로그(log)
프로그램 개발, 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링 하기 위한 텍스트
즉, 무언가를 기록하는 행위다.
이러한 개념이 확장되면서 운영체제나 소프트웨어 실행 중 발생하는 정보 전반을 기록하는 파일을 의미하게 되었다.
필요한 정보를 제공해주지만 계속 쌓이다보면 시스템 용량이 당연히 부족해지기 때문에
로그가 저장되는 DB에 데이터를 어떨 때 쌓고 언제 삭제할 것인지 계획을 수립해 운영하는 것이 좋다.
로깅
프로그램 동작시 발생하는 모든 일을 기록하는 행위
시스템이 작동할 때 시스템의 작동 상태의 기록, 보존, 이용자의 습성 조사및 시스템 동작 분석 등
작동 중 일련의 사건을 시간 경과에 따라 각종 정보에 대한 기록을 만드는 행위를 로깅이라고 한다.
여기서 말하는 모든 일이란 두 가지로 나눌 수 있다.
서비스 동작 상태
|
장애
|
로그를 출력하는 방법은 2가지가 존재한다.
1. System.out.println() 2. 로깅(Logging) 라이브러리
누구나 처음에 System.out.println("Hello World") 를 찍어봤을텐데
과거에 우리가 찍었던 이것이 로깅의 방법 중 하나였다고 볼 수 있다.
(print 줄 넣기는 간단한 로그를 생성하기만 한다)
그러나 이런 방법으로 상용 서버에서 로그를 남기면 안 된다.
- 속도가 느려 성능상의 문제가 있다.
- 날짜,시간,타입(error, info, debug ...) 등 최소한의 정보가 없다.
- 데이터를 쌓고 남기기가 힘들다.
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
'활동 > 호기심' 카테고리의 다른 글
[개발자 지식] 디스크 관리 및 파일 시스템 - 디스크의 구조와 디스크 추가 방법 이해 (0) | 2024.05.25 |
---|---|
[개발자 지식] JSON은 프로그래밍 언어와 프레임워크 등에 독립적이므로 서로 다른 시스템 간 데이터를 교환하기 좋다. (0) | 2024.05.25 |
우아한테크 MVC(Model, View, Controller) 패턴을 지키면서 코딩하는 꿀팁 (3) | 2023.10.10 |
save() 메서드는 엔티티 상태를 데이터베이스에 반영 (1) | 2023.09.25 |
Spring Boot 게시글 업데이트 기능 구현 (Thymeleaf 활용 가이드) (0) | 2023.09.22 |