11장
교재 스프링 코딩 공작소
https://thebook.io/080266/0376/
스프링 코딩 공작소: 11장 로그 기록: 로그 기록 만들기
더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.
thebook.io
로그 기록 : 로그 기록 만들기
웹 URL요청을 할 때 중간에서 요청을 가로채는 인터셉터를 이용하여 로그기록을 살핌
Log4j
요청 URL의 경로마다 접근 내역과 작동 내역 등이 남아 있음
아파치 소프트웨어 라이선스에 따라 배포되는 로깅 프레임 워크
>> 안정적, 신속성, 유연성
웹 애플리케이션이 동작하는 중에 남긴 로그 기록은 애플리케이션이 운영되는 동안 정확한 상황과 상태 정보를 제공함
파일이나 DB에 기록 -> ai 인공지능이 클라우드에 저장하고 판단하여 차단함
pom.xml 파일에 다음과 같이 의존 라이브러리를 포함해야 함!!
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
Log4j 구조 / 로깅 레벨 공부해야함
Log4j
- logger
- appender
- layout
▼ 표 11-1 Log4j의 로깅 레벨
레벨 | 설명 |
FATAL | 조기 종료를 유발하는 심각한 오류가 발생한 상태를 나타냅니다. |
ERROR | 기타 런타임 오류 또는 예기치 않은 상태를 나타냅니다. |
WARN | 사용되지 않는 API 사용, API의 사용 빈도, 오류, 바람직하지 않거나 예기치 않은 런타임 상황의 경고성 메시지를 나타냅니다. |
INFO | 시작, 종료 같은 런타임 이벤트 메시지를 나타냅니다. - 운영서버 |
DEBUG | 디버그 용도로 시스템 흐름에 대한 자세한 정보를 나타냅니다. |
TRACE | 가장 하위 로깅 레벨로, 모든 로그에 대한 상세한 정보를 나타냅니다. |
ERROR, WARN, INFO, DEBUG, TRACE를 가장 많이 사용함
아래에서 위 순으로 레벨이 높음
![](https://blog.kakaocdn.net/dn/cMgtI7/btsmqTsELyl/ysVUq003KfLJZwgD0gOKSk/img.jpg)
appender
출력할 위치를 결정하는 클래스
System.out.println처럼 개발자가 지정한 위치가 아니라 클래스 내에서 출력 위치를 지정
▼ 표 11-2 Appender의 유형
클래스 | 설명 |
ConsoleAppender | 콘솔에 로그 정보를 출력합니다. |
FileAppender | 파일에 로그 정보를 출력합니다. |
RollingFileAppender | 로그 크기가 지정한 용량 이상이 되면 다른 이름의 파일로 출력합니다. |
DailyRollingFileAppender | 하루 단위로 로그 정보를 파일에 출력합니다. |
SMTPAppender | 로그 메시지를 이메일로 보냅니다. |
NTEventLogAppender | 윈도의 이벤트 로그 시스템에 로그 정보를 기록합니다. |
layout
출력 형식을 결정
단순한 텍스트 출력, 포맷을 지정한 패턴, HTML 문서 형식등을 제공
▼ 표 11-3 layout의 클래스 유형
클래스 | 설명 |
DateLayout | 로그 정보를 날짜 중심으로 간단하게 기록합니다. |
HTMLLayout | 로그 정보를 HTML 형식으로 기록합니다. |
PatternLayout | 로그 정보를 사용자 정의 패턴에 따라 기록합니다. • %c: 카테고리 출력 • %p: 로깅 레벨 출력 • %m: 로그 내용 • %d: 로깅 이벤트가 발생한 시간, yyyy-MM-dd, HH:mm:ss 등 시간 형식 사용 • %t: 로깅 이벤트를 발생한 스레드 이름 • %n: 개행 • %C: 클래스 이름 • %F: 로깅이 발생한 파일 이름 • %I: 로깅이 발생한 호출자 정보 • %L: 로깅이 발생한 코드 라인 수 • %M: 로깅이 발생한 메서드 이름 • %r: 애플리케이션 시작 이후부터 로깅이 발생한 시점의 시간 • %x: 로깅이 발생한 스레드와 관련된 NDC(Nested Diagnostic Context) • %X: 로깅이 발생한 스레드와 관련된 MDC(Mapped Diagnostic Context) |
SimpleLayout | 로그 정보를 ‘레벨-정보’ 형식으로 간단하게 기록합니다. |
XMLLayout | 로그 정보를 XML 형식으로 기록합니다. |
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.springmvc.chap11">
<level value="info" />
</logger>
<!-- 3rdparty Loggers -->
<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" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
설명
인터 셉터
사용자가 URL을 요청하면 컨트롤러에 요청이 들어가기 전에, 컨트롤러가 웹으로 응답하기 전에 가로채어 특정 작업을 처리하는 것을 의미
들어오는, 나가는 과정에서 반복적으로
• 응답 페이지를 출력하기 전에 서버에서 미리 데이터를 가져오는 기능(spooling)
• 폼에서 제출(submit)이 중복으로 일어나는 것을 막는 기능
• 요청이 처리되기 전에 파일을 업로드(multipart)하는 기능
• 각 요청에 대한 상세한 내역을 기록(logging)하는 기능
• 유효성을 검사(validation)하는 기능
• 시간별 동작 및 성능의 병목 지점을 검사(profiling)하는 기능
prg -> 포스트리다이렉트뭐시기,
인터셉터 등록
// 모든 웹 요청 URL에 적용
<interceptors>
<bean id=" " class="인터셉터 클래스(패키지 포함)"/>
</interceptors>
// 특정 웹 요청 URL에 적용
<interceptors>
<interceptor>
<mapping path="특정 패턴의 요청 URL"/>
<beans:bean id=" " class="인터셉터 클래스(패키지 포함)"/>
<interceptor>
</interceptors>
인터셉터 로그 기록
HandlerInterceptor 인터페이스
- preHandle() :메서드는 웹 요청 URL이 컨트롤러에 들어가기 전에 호출되며, false로 반환하면 이후 내용은 실행하지 않음
- postHandle() : 웹 요청 URL을 컨트롤러가 처리한 후 호출되며, 컨트롤러에서 예외가 발생하면 더 이상 실행되지 않음
- afterCompletion() : 메서드는 컨트롤러가 웹 요청을 처리하여 뷰에 응답 전송이 종료된 후 호출
boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
• 역할: 컨트롤러를 호출하기 이전에 핸들러 실행을 차단합니다.
• 매개변수:
- request: 현재 HTTP 요청
- response: 현재 HTTP 응답
- handler: 실행 핸들러 선택
void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception;
• 역할: 컨트롤러를 호출하여 처리한 후에 핸들러 실행을 차단합니다.
• 매개변수:
- request: 현재 HTTP 요청
- response: 현재 HTTP 응답
- handler: 시작된 비동기 실행 핸들러
- modelAndView: ModelAndView로 반환된 핸들러
void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception;
• 역할: 뷰에 최종 결과를 반환한 후에 핸들러 실행을 차단합니다.
• 매개변수:
- request: 현재 HTTP 요청
- response: 현재 HTTP 응답
- handler: 시작된 비동기 실행 핸들러
HandlerInterceptorAdapter
HandlerInterceptor 인터페이스를 구현하기 편리하도록 작성된 어댑터 클래스
HandlerInterceptorAdapter 클래스는 모든 메서드를 구현할 필요가 없음
preHandle()
'IoT 빅데이터 응용 교육 과정_하계' 카테고리의 다른 글
[IoT 빅데이터 응용 교육과정] 23.07.06 13장 유효성 검사 (0) | 2023.07.06 |
---|---|
[IoT 빅데이터 응용 교육 과정] 23.07.06 12장 다국어 처리 (0) | 2023.07.06 |
[IoT 빅데이터 응용 교육 과정]23307.04_2 10장 예외처리 (0) | 2023.07.04 |
[IoT 빅데이터 응용 교육과정]23.07.04 파일 업로드 (0) | 2023.07.04 |
[IoT 빅데이터 응용 교육과정] 23.07.03_1 8장 스프링 시큐리티 (0) | 2023.07.03 |