스프링에서 로그 찍는 법은 총 두 가지가 있다.
Log4j or Logback 와 같은 로깅 프레임워크를 이용하거나
System.out.println() 을 이용하여 로그를 찍을 수 있다.
1. 로깅 프레임워크 이용하기(Log4j)
이클립스에서 스프링 레거시 프로젝트를 생성할 경우, 자동으로 src/main/resources 경로에 log4j.xml 파일이 생성된다.
log4j.xml 파일 내용은 아래와 같다.
<?xml version="1.0" encoding="UTF-8"?>
: XML 버전 및 인코딩 정보
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
: log4j.dtd 파일 위치 지정
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
: log4j 설정 정보가 포함된 XML 파일
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
: appender - 로그를 출력할 대상 및 출력 방식
ㄴ ConsoleAppender - 콘솔에다가 로그 출력
<param name="Target" value="System.out" />
: 출력 대상 지정. value가 System.out이므로 콘솔 출력
<layout class="org.apache.log4j.PatternLayout">
: 출력 형식 지정. 로그 레벨, 로거 이름, 로그 메시지 등을 포함한 형식 사용
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
: 로그 출력 형식 지정. %p: 로그 레벨, %c: 로거 이름, %m 로그 메시지, %n 개행 문자
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.sp.app">
: 로거 설정 요소. com.sp.app 패키지에 속한 클래스들의 로그 레벨 설정
<level value="info" />
:로그 레벨 지정 요소. info 레벨 이상의 로그만 출력
</logger>
<!-- 3rdparty Loggers -->
: 로그 레벨 개별 설정. 해당 패키지의 로그 레벨 info 이상일때만 출력
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="info" />
</logger>
<!-- Root Logger -->
<root>
: 루트 로거 설정 요소. 모든 로거의 상위에 위치하며, 모든 로그 메시지 처리
<priority value="warn" />
: 루트 로거의 로그 레벨 설정 요소. warn 레벨 이상의 로그만 출력
<appender-ref ref="console" />
: 로그 출력 대상 지정 요소. console Appender를 사용하도록 설정
</root>
</log4j:configuration>
컨트롤러로 가서 로그를 찍어보자.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Controller
public class ExampleController {
private static final Logger logger = LoggerFactory.getLogger(ExampleController.class);
@RequestMapping("/")
public String home() {
logger.info("home() is executed!");
return "home";
}
}
클라이언트가 메인페이지("/")를 들어가면 home() 메서드에서 로그를 기록한다.
info는 로그 레벨의 한 종류이다. 다른 로그 레벨에 대해서도 알아 보자.
로그 레벨
(중요도 낮은 순 -> 높은 순)
1. trace
- 보통 디버깅할 때 사용
- 가장 상세한 로그 레벨. 어떤 메서드가 호출됐는지 등의 상세 정보 제공
2. debug
- 개발중에 사용
- 각 메서드가 어떻게 동작하는지 등에 대한 상세한 정보 제공
3. info
- 어떤 일이 일어났는지 중요한 정보를 제공
- 서버 시작 및 중지, 작업이 성공적으로 완료됐는지 등의 정보 제공
4. warn
- 잠재적인 문제가 있을 경우, 경고 메시지 전송
- 디스크 공간 부족 경고 메시지 등의 정보 제공
5. error
- 에러 메시지 제공
- 네트워크 연결 끊김, 파일 찾기 오류 등의 정보 제공
6. fatal
- 치명적인 오류 발생시 사용
- 프로그램 실행이 중단되거나 불가능한 상태일 때
2. System.out.println() 을 이용하기
@Controller
public class ExampleController {
@RequestMapping("/")
public String home() {
System.out.println("home() is executed!");
return "home";
}
}
System.out.println() 을 이용하여 찍을 수 있지만 성능, 로그 레벨 관리 등의 문제가 생기므로 지양하도록 하자.
'Backend > Spring' 카테고리의 다른 글
[Spring] Bean 순환 참조 (0) | 2024.05.01 |
---|---|
데이터 전송 어노테이션 - @PathVariable, @ResponseBody, @RequestParam (0) | 2022.12.01 |
트랜잭션 처리 (0) | 2022.11.26 |
스프링 XML 정리 - 컨테이너(applicationContext) (0) | 2022.11.14 |
스프링 어노테이션 정리 - AOP 구현, 시점 기반 (0) | 2022.11.13 |