[Spring] MVC2 (1) 로깅, ajax
ㅁ 새로운 패키지 생성시 베이스 패키지를 com.br.ajax로 지정했다.
- 이제 모든 클래스는 전부 com.br.ajax를 베이스 패키지로 해야 한다.
빈 스캐닝을할 때 베이스 패키지를 기준으로 하기 때문에 2번째 레벨 등에서 쪼개지면 안 된다.
- 빈등록이 제대로 되려면 베이스 패키지로 com.br.ajax를 가지고 있어야 한다.
ㅁ 디버깅
- 디버깅(데이터가 잘 담겼는지 확인하는 등)할 때 이때까지 System.out.println문을 사용해 왔다.
이 메소드가 잘 실행되는지 확인용으로 디버깅용으로 출력문을 작성했었다.
- 기본적으로 이 출력문은 운영되는 서버의 콘솔에 출력된다.
개발이 다 끝나고 실제 배포되면 운영되는 서버의 콘솔창에 출력된다.
- 과부하가 심해서 로그로 출력하는 방법이 좋다.
- 출력문은 성능 저하를 야기시켜서 로그를 출력한다.
ㅁ 로깅
- 알게모르게 서버를 start하는 순간 읽어들이는게 굉장히 많다.
콘솔창에 사실 로그 출력이 되고 있었다. 검은 글씨가 전부 로그 출력이다.
- 서버를 start하는 순간 스프링 객체들도 생성되고 거기에 로그 출력문들이 있어서 검은 글씨의 로그가 출력되고 있었다.
엄청 많은데 그중에 INFO 레벨 이상의 로그만 출력되고 있는 것이다.
- src/main/resources의 log4j.xml 덕분에 로그 출력이 되고 있었다.
- 콘솔 말고 파일에도 출력할 수 있다.
- 요즘은 로깅 프레임워크로 log4j보다 로그백을 쓰는 추세로 바뀌었다.
- 스프링은 기본적으로 log4j가 잡혀있다.
- 스프링부트는 기본적으로 logback가 잡혀있다.
ㅁ log4j.xml
- ConsoleAppender로 콘솔에 출력하고 있다.
- %p, %c, %m, %n 등의 패턴이 적혀있다.
- 로그백을 쓰면 패턴도 달라진다.
============================================================================
ㅁ logback.xml
- src/main/resources에 logback.xml을 생성한다.
- 이름을 이렇게 작성해야 자동으로 실행된다.
- 로그 관련 환경설정 파일 작성법이 어렵다.
- 수정할 일은 없다. 그래도 볼 줄은 알아야 한다.
- 제일 바깥은 태그로 감싸있어야 한다. 태그를 작성한다.
ㅁ slf4j
- slf4j가 다양한 logging framework 간에 중간 인터페이스 역할을 수행하면서 호환성을 보장하는 역할을 수행한다.
그래서 pom.xml에서도 slf4j 부분은 지우지 않았다.
※ <appender>
- 전달된 로그를 어디(콘솔, 파일, db)에 어떤 형식으로 출력할지 결정하는 태그
- ConsoleAppender : 로그를 콘솔에 출력하기 위한 appender
- JDBCAppender : 로그를 RDB에 출력하기 위한 appender
- FileAppender : 로그를 파일에 출력하기 위한 appender
- RollingFileAppender : FileAppender를 보완한 개념
※ <encoder> + <pattern>
- 로그를 어떤 패턴으로 출력할건지 형식을 지정한다.
- %logger : 로거 주체 (로그가 출력되는 클래스)
- %logger{0}으로 하면 클래스명이 출력된다.
- %logger{1}하면 패키지 이름의 마지막 부분과 클래스명이 출력된다.
- 그냥 %logger를 두면 풀 클래스명이다. 풀 클래스명으로 두는게 좋다.
- %line : 로거 발생 줄 수
- %level : 로그 레벨
- %msg : 로그 메세지
- %date : yyyy-MM-dd HH:mm:ss:SSS 형식으로 로그 출력 날짜가 출력된다.
- %date{포맷} : 내가 지정한 날짜 및 시간에 대한 포맷을 반영한 로그출력 날짜가 출력된다.
ㅁ <root>
- 현재 애플리케이션의 "모든 패키지 안"의 "특정 레벨 이상"의 로그를 "특정 appender"에 적용시켜서 출력하는 태그.
- root logger라고도 한다.
<root level="로그레벨(해당 레벨 이상의 로그만이 출력됨)">
<appender-ref ref="로그를 출력시킬 appender 이름" />
</root>
※ 로그 레벨 (아래로 갈수록 레벨이 높아짐)
- TRACE : 디버깅보다 상세한 정보 표현용
- DEBUG : 개발 단계에서 디버깅용
- INFO : 정보성 메세지 기록용
- WARN : 처리는 가능하나 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지 기록용
- ERROR : 요청 처리 중 문제가 발생 기록용
- FATAL : 아주 심각한 시스템적인 문제 발생 기록용
- 결론부터 말하면 회사가서도 우리가 쓸 로그 레벨은 DEBUG와 INFO 뿐이다.
- 사실 외부 매체에 디버깅용을 남길 필요는 없다. 외부에 기록할 것은 INFO 메세지로 남기면 된다.
- 이 모든것을 우리가 다 콘솔이나 파일에 출력하진 않고 어떤 레벨 이상만 남긴다.
ㅁ Logger 임포트
- Logger를 import할 때 logback의 Logger가 아닌 slf4j의 Logger여야 한다.
- slf4j도 2개가 있는데 internal이 아닌 "org.slf4j.Logger"여야 한다.
ㅁ <logger>
- 현재 애플리케이션의 "특정 패키지 안"의 "특정 레벨 이상"의 로그를 "특정 appender"에 적용시켜 출력
- 작성방법
<logger name="특정패키지" level="로그레벨" [additivity="true | false"]>
[<appender-ref ref="로그를 출력시킬 appender 이름" />]
</logger>
- 다시 또 root logger가 있으면 또 출력이 된다.
- 기본적으로 logger가 먼저 반영되고 root logger가 반영된다.
- root logger로 전달 여부. 기본값 true.
==========================================================================
ㅁ 파일에 출력
- FileAppender
- RollingFileAppender
'Spring' 카테고리의 다른 글
스프링 정리4 - 첨부파일 (0) | 2024.11.25 |
---|---|
스프링 정리3 - AJAX (1) | 2024.11.15 |
스프링 정리 - MVC (0) | 2024.11.13 |
디비 (1) | 2024.11.06 |
[스프링부트] 10. 트랜잭션 처리 (0) | 2024.11.06 |