실행 여부 확인
프로그램이 잘 실행되는지 문제가 발생하면 어디서 발생했는지 추적
Log4j
spring boot log4j 검색
https://huisam.tistory.com/entry/log4j2
스프링 부트의 기본 로그 라이브러리를 제거한다
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
gradle cleanEclipse
gradle eclipse
https://docs.spring.io/spring-boot/docs/2.6.6/reference/htmlsingle/#using.build-systems.starters
log4j2 스프링부트 라이브러리를 추가한다
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
gradle eclipse
3단계 - log4j2 설정 파일을 생성한다
루트 폴더에 둬야 한다
파일명은 무조건 log4j2.xml
로 하기
4단계 - 스프링부트 설정 파일에 log4j2 설정 파일의 경로를 지정한다.
logging.config=classpath:log4j2.xml
sql문이 나온다
로그인해서 게시물 등록해보기
너무 자세하게 나오니까 로깅 레벨을 낮추겠다
<PatternLayout
pattern="[%-5level] %d{yyyy-MM-dd} [%t] %c{1} - %msg%n" />
%t : 스레드 이름
%c : 클래스 이름. 패키지 이름을 제외한 마지막 이름.
%n : 줄바꿈 기호
<RollingFile>
: 파일로 출력
<Root>
: 모든 실행에 공통적으로 적용
log4j2 doctype 검색
태그에 쓸 수 있는 게 무엇이 있는지 정보가 있음
<Logger name="com.eomcs.mylist" level="debug">
<AppenderRef ref="stdout" />
</Logger>
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
Logger log = LogManager.getLogger(BoardController.class);
로그를 남길 때 BoardController 클래스 이름으로 로그를 남긴다는 거
하나의 객체를 쓰면 돼서 static 붙이기
무조건 log 객체는 한 번만 만들어진다
// log를 출력하는 도구 준비
private static final Logger log = LogManager.getLogger(BoardController.class);
@RequestMapping("/board/list")
public Object list() {
log.fatal("fatal...");
log.error("error...");
log.warn("warn...");
log.info("info...");
log.debug("debug...");
log.trace("trace...");
return new ResultMap().setStatus(SUCCESS).setData(boardService.list());
}
fatal -> 더이상 실행이 불가능한 오류가 발생했을 때, 서버 재실행이 필요한 경우
error -> 실행 중 오류 발생 했을 때
warn -> 실행하는데는 문제가 없지만 장기적으로 문제를 일으킬 가능성이 있을 때
다른 오류의 원인이 될 수 있는 상황
info -> 실행 흐름을 기록하고 싶을 때
debug -> 개발하는 동안 참조할 정보
trace -> 시스템 상태를 세세하게 기록
운영자가 봐야할 정보
개발자가 봐야할 정보
시스템을 멈추는 상황이 발생할 때 개발자와 운영자 모두 확인해야 하는 정보
<Logger name="com.eomcs.mylist" level="error">
<AppenderRef ref="stdout" />
</Logger>
<Logger name="com.eomcs.mylist" level="info">
<AppenderRef ref="stdout" />
</Logger>
<Logger name="com.eomcs.mylist" level="debug">
<AppenderRef ref="stdout" />
</Logger>
개발자가 봐야할 정보
설정파일에서 레벨만 변경하면 됨
각각 설정도 가능
<Logger name="com.eomcs.mylist">
<AppenderRef ref="stdout" level="error"/>
<AppenderRef ref="file" level="info"/>
</Logger>
개발하는 동안에는 debug로 설정하기. SQL문까지 출력됨.
<Logger name="com.eomcs.mylist" level="debug">
<AppenderRef ref="stdout" />
</Logger>
지금부터 println() 쓰지 말기
@RequestMapping("/board/list")
public Object list() {
log.debug("게시물 목록 조회!");
return new ResultMap().setStatus(SUCCESS).setData(boardService.list());
}
@RequestMapping("/board/add")
public Object add(Board board, HttpSession session) {
log.info("게시물 등록!"); // 개발이 끝나고 여기까지만 출력
log.debug(board); // 개발하는 동안
// System.out.println("BoardController.add() 호출됨!");
Member member = (Member) session.getAttribute("loginUser");
board.setWriter(member);
boardService.add(board);
return new ResultMap().setStatus(SUCCESS);
}
log.trace() 하면 level="trace"라고 해야 출력됨
<Logger name="com.eomcs.mylist" level="debug">
<AppenderRef ref="stdout" />
</Logger>
<Root level="info">
<AppenderRef ref="stdout" />
</Root>
실행한 SQL문이 무엇이고 넘어간 파라미터 값이 무엇인지 알 수 있다.
error, info, debug 자주 씀
90-MyList프로젝트3 / 28 페이지
https://docs.spring.io/spring-boot/docs/2.6.6/reference/htmlsingle/#features.logging
Log Level: ERROR, WARN, INFO, DEBUG, or TRACE.
Logback does not have a FATAL level. It is mapped to ERROR.
build.gradle 가서 다시 둘 다 지우기
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
gradle eclipse
Refresh
log4j2.xml 파일 지우기
https://docs.spring.io/spring-boot/docs/2.6.6/reference/htmlsingle/#features.logging.log-levels
application.properties 수정하기
3단계 - 로그 객체를 사용하여 로그를 출력한다
https://logback.qos.ch/manual/introduction.html
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
slf4j에는 객체를 바로 전달하는 메서드가 없다
직접 문자열을 꺼내야 됨
MvcConfiguration 가서 slf4j로 바꿔 주기
AuthInterceptor 도 slf4j로 바꿔 주기
BookController 도 slf4j로 바꿔 주기
http://localhost:8080/template/page1.html?content=/board/index.html
스프링 기본 설정 사용하면 build.gradle에 따로 설정할 게 없다
최소 설정으로 스프링 부트에서 로그 출력