본문 바로가기
Spring

스프링 정리2 - 로깅

by moca7 2024. 11. 14.

 

 

 

[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