System.out.print() 대신 Log를 사용하는 이유는 무엇일까?
- System.out.print()에 비해 오버헤드가 적다.
- 시간, 로그레벨, 발생한 클래스등 더 자세한 정보를 알 수 있다.
- 로그 내용을 파일에 남기기 간편하다.
- 원하는 레벨의 로그만 확인가능하다.
로그를 구성하는 요소
- logger클래스 : 로그 출력여부를 설정된 로그 레벨에 따라 결정하고 appender에 로그 정보를 전달
- appender클래스 : 로그정보를 출력할 위치를 결정하는 클래스(파일, 콘솔, DB등등)
- layout클래스 : 로그정보의 출력 형식을 결정(HTML형식, XML형식, 사용자 정의 형식 등등)
로그 레벨(아래로 갈수록 로그의 레벨이 높음)
TRACE : 가장 하위레벨의 로그
DEBUG : 디버그 용도로 사용
INFO : 런타임시에 발생하는 동작을 나타낼 때 사용
WARN : 오류가 발생할 가능성이 존재하는 경우 사용
ERROR : 오류가 발생한 경우 사용
FATAL : 프로그램이 강제로 종료될 만한 오류인 경우 사용
logger의 계층구조
- logger는 계층구조를 가지고 모든 logger의 최상위 logger는 root logger이다. logger가 따로 지정되지 않은 경우 root logger에서 설정된 방식으로 로그를 출력한다
spring에서 log4j 적용
- pom.xml에 log4j의존성 설정이 되었는지 확인
- src/main/resources 폴더 아래 log4j.xml 파일 생성
- < appender>태그안에 < layout>태그를 작성하여 로그를 출력할 위치와 방식을 설정한다
- < logger>태그에 logger를 추가할 패키지와 출력할 로그레벨을 설정한다
- < root>태그를 통해 root logger을 설정한다.
로그가 설정된 대로 출력되지 않았던 이유
- Src/test/resource에 같은 같은 이름의 log4j.xml파일이 존재 했는데 해당 파일에서 로그레벨을 수정하니 정상적으로 출력했다. 따라서 Src/main/resource의 log4j.xml의 설정을 사용하기 위해 src/test/resource의 파일을 삭제했다