파일로 저장되지 않고 휘발된다.
에러가 발생한 시각, 문제의 수준, 에러가 발생한 위치를 기록하지 않는다.
여러 로깅프레임워크에서는 로그 레벨에 따라 디버깅 정보를 남긴다.
로그 레벨 예시
System.out.println()은 레벨별 출력이 불가
로그 레벨 분리가 안되기 때문에 필터링이 불가능해서 모든 정보를 다 출력해야 한다. 반면 로깅프레임워크에서는 필터링이 가능해서 내가 보고 싶은 정보만 출력 가능하다.
println() 메소드에는 newLine() 메소드를 호출한다. 또 이 newLine() 메소드 내부를 살펴보면, synchronized 키워드가 붙어있다.
이 때 newLine() 메서드는 임계 영역(Critical Section)이 되어서, 멀티스레드 환경에서 newLine() 메서드가 호출되면 다른 스레드들은 newLine() 메서드의 실행이 끝나서 잠금이 풀린 뒤에야 실행이 가능하다. 즉, 오버헤드가 발생한다.
스프링을 실행하고 멀티스레드로 동작하는 톰캣에서는 치명적이다.
.println()은 io 패키지 내에 있는데, I/O 작업에서는 I/O 시스템 콜을 호출해서 커널모드에서 작업을 하기 때문에 시간을 많이 소요해 성능이 좋지 않다.