반응형
1. 로그 레벨 출력이 불가하다.
- 로깅 프레임워크처럼 개발환경에 따른 로그 레벨을 설정할 수 없다.(Logback의 로그레벨 : TRACE, DEBUG, INFO, WARN, ERROR, FATAL)
- 그렇기 떄문에 각 환경마다 로그 설정이 불가하다.
- 예를 들면, 프로덕션 환경에서 디버그 레벨의 로그를 제거하고 싶은 경우 코드를 통해 일일히 제거해야한다.
2. 로그에 필요한 최소한의 정보가 없다.
- System.out.println은 단순히 문자열을 찍는 메서드여서, 로깅시 필요한 날짜, 시각, 문제의 수준, 위치 등의 정보를 따로 표시할 수 없다.
3. 휘발성
- System.out.println은 표준 출력으로만 사용되고, 따로 기록되지 않는다. 로그 파일로서 관리가 불가하여 사후 처리시, 로그를 확인할 수 없다.
3. 성능저하
- 단순 디버깅 용도여도 System.out.println을 사용하지 않는 이유는 성능 저하 때문이다.
- println은 synchronized로 동기화 처리가 되어있어, 오버헤드가 발생할 수 있다.
- synchronized는 메서드나 블록 코드에 동기화 영역을 표시하는 것으로, 동기화된 불록은 한 시점에 1개의 스레드만 접근이 가능
- System.out.println() 메서드를 여러 스레드가 사용하게 된다면 오버헤드가 발생하여 프로세스 처리가 늦어지게 될 수 있다. (* 오버헤드(Overhead) : 어떤 처리를 하기 위해 추가로 들어가는 처리 시간, 메모리 등의 컴퓨터 자원을 말합니다.)
- Blocking I/O
cf. 코딩 테스트시에 System.out.println을 사용하여 출력하면 시간초과가 발생할 수 있다.
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
References
- https://wildeveloperetrain.tistory.com/204
- https://hudi.blog/do-not-use-system-out-println-for-logging/
로깅을 System.out.println() 로 하면 안되는 이유
학습 배경 우테코 레벨3 팀프로젝트 3차 데모데이 요구사항 중 하나는 ‘디버깅할 수 있는 로그 파일 출력’ 이다. 이전까지는 로깅에 대해 전혀 신경쓰지 않고 있었는데, 슬슬 로깅에도 신경써
hudi.blog
'개발 > Java' 카테고리의 다른 글
String, StringBuilder, StringBuffer (0) | 2022.12.13 |
---|---|
[Java] Garbage Collection(가비지 컬렉션) (2) | 2022.12.02 |
equals() (0) | 2022.11.30 |
[자바/JAVA] 정적 변수와 메서드 (static) (0) | 2021.06.25 |
[자바/JAVA] this (0) | 2021.06.24 |