반응형

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

 

 

로깅을 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

+ Recent posts