-
[Spring] e.printStackTrace() vs logger.error(logger.error를 사용해야하는 이유)웹 개발/Spring Framework 2018. 12. 22. 15:04
temp1 e.printStackTrace() vs logger.error
e.printStackTrace()를 사용하지 말고 logger.error를 사용하라는 글을 읽었던 기억이 있다. 부가적인 설명이 있었는데, 뭔가 구체적으로 알고 싶어 스택오버플로를 뒤져봤다. 왜 써야하는지 많은 개발자분들이 댓글을 달아놨는데, 그 댓글들을 해석해 정리해두려한다.(별이 많은 댓글 중심으로 정리!)
answers
- logback이나 log4j같은 logging framework를 사용하지 않으면 아래와 같은 코드를 작성할 것이다.
e.printStackTrace();
logging framework를 사용한다면, 아래와 같이 작성할 수 있다.
logger.error("Error Occurs!!", e);
logging framework는 많은 다양성을 부여한다. 로그를 콘솔에 남길 것인지 파일에 남길 것인지 선택할 수 있고, 관계없다고 생각하는 메세지들을 건너뛸 수 있다.
2. 예외 추적을 위해 printStackTrace()를 call한다면, System.err로 쓰여진다. 그리고 이는 제어하기 힘들다.(또는 필터링하거나) 대신 예외 로그를 남길 때 logging framework를 사용하면 아래와 같은 점들을 이용할 수 있다.- 로그를 다른 장소에 동시에 남길 수 있다. (예를 들어, 콘솔과 파일)
- 중요도 혹은 엄격성(예를 들어, error,debug,info,warning etc)에 따라 그리고 기본골격(?)(보통 package, class 기반) 로그를 필터링 할 수 있다.
- 코드 변화 없이 로그 포맷에 영향을 줄 수 있다.
* 개인적으로 e.printStackTrace()가 톰캣의 catalina.out에만 남지만(e.printStackTrace()는 logger를 저장하는 파일에 남지 않는다.), logger는 원하는 위치에 파일을 저장할 수 있고, error message를 간단히 남길 수 있어서 좋다.
'웹 개발 > Spring Framework' 카테고리의 다른 글
[Eclipse] tomcat 서버 목록에 프로젝트가 안 보일 경우 (0) 2019.01.15 [Spring]필드 주입(Field Injection) 대신 생성자 주입(Constructor Injection)을 사용해야 하는 이유 (2) 2018.12.31 [Spring] 스케줄러 만들어보기 (0) 2018.12.18 [Mybatis]mybatis에서 테이블의 언더바 컬럼을 카멜형식으로 변환해주는 설정 (0) 2018.11.20 [Spring] @PostConstruct란?(정의와 장점) (0) 2018.11.12