오늘은 몰랐으면 내일은 알면 된다
2022-12-19 (1) logging 본문

Jar 는 Java Archive,
War 는 Web Archive이다.
War는 Jar와는 다르게 ServletInitializer가 자동포함되는 차이가 있다. MVC 프로젝트가 될 수 있도록 만들어주는 것이다.
ServletInitializer는 webapp의 내용을 WEB-INF에 옮겨주고, web.xml 을 읽어서 스프링 컨테이너를 구동할 수 있게 해준다.
그러나 내장 톰캣은 버전9로, Servlet API 4.0을 사용하기 때문에 web.xml을 사용할 일은 없을 것이다.(web.xml을 사용하지 않도록 권장함, 대신 설정용 클래스를 직접 만들어준다.)

WEB-INF는 주소 url로 요청할 수 없는 특수경로이다.
webapp 폴더가 필요한 이유는, 해당 폴더가 배포시에 서버에 그대로 복붙이 되기 때문이다.
어떤 IDE를 사용하든지간에 서버에 배포를 하기 위해서는 webapp 폴더가 존재해야한다.







Spring Boot에서는 SLF4J의 메서드를 호출하면, 바인딩된 Logback의 메서드가 호출되는 식이다. 사용자가 Logback의 메서드를 직접 호출하지 않는다.

Log4j의 내용을 Bridge를 통해 SLF4J로 보내고, Logback으로 바인딩하여 처리할 수도 있다.
[SLF4J 바인딩 종류]

Spring Boot에는 아래의 두가지 바인딩이 자동으로 설치되어있다.

[SLF4J 브릿지 종류]



이제 실제로 만들어보자.
Demo1Application 클래스에 로그를 찍어볼 것이다.
private Logger log = LoggerFactory.getLogger(getClass());
이 때, Import 되는 패키지는 slf4j의 것이어야 한다.

main 메서드에 Logger를 쓰기 위해서는 위의 문법을 static 버전으로 바꿔줘야 한다. (getClass()는 스태틱이 아니라 사용불가)
private static Logger LOG = LoggerFactory.getLogger(Demo1Application.class);
public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
LOG.trace("TRACE-스프링부트");
LOG.debug("DEBUG-스프링부트");
LOG.info("INFO-스프링부트");
LOG.warn("WARN-스프링부트");
LOG.error("ERROR-스프링부트");
로깅 레벨을 application.properties에 지정해준다.

실행 후 콘솔을 확인해보면, trace 와 debug는 출력되지 않은 것을 확인할 수 있다.

소스코드의 변경 없이 level만 바꿔보면, error만 출력되는 것을 확인할 수 있다.


application.properties도 여러개로 나눌 수 있다. 이때 명명 규칙은 - 를 사용한다.


profile 속성값을 주면, application- 뒤에 해당 속성값의 이름인 파일을 찾아서 적용한다.

즉, 다음과 같이 설정하면 dev 파일의 debug 레벨을 따르게 된다.


'Java > JAVA 개발자 양성과정' 카테고리의 다른 글
| 2022-12-19 (2) Spring Boot 단위테스트 (0) | 2022.12.19 |
|---|---|
| 2022-12-17 (1) Spring Boot 계속 (0) | 2022.12.17 |
| 2022-12-16 (5) Spring Boot 시작 (0) | 2022.12.16 |
| 2022-12-16 (4) Dynamic SQL을 이용한 실습 (0) | 2022.12.16 |
| 2022-12-16 (3) Transaction (0) | 2022.12.16 |