IoT 빅데이터 응용 교육 과정_하계

[IoT 빅데이터 응용 교육 과정] 23.07.05 11장 로그 기록

연지양갱 2023. 7. 5. 14:08
728x90
반응형
SMALL

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를 가장 많이 사용함

 

아래에서 위 순으로 레벨이 높음

 

▲ 그림 11-1 &nbsp; 로깅 레벨

 

 

 

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()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형