반응형
해당 글에서는 Access Log에 대해 이해하며 각각의 요소에 대해 파악하여 Spring Boot 환경에 설정해 보는 과정에 대해서 공유 목적으로 작성한 글입니다.
1) Tomcat Access Log
💡 Tomcat Access Log
- 웹 서버의 로그 파일로서 클라이언트의 HTTP 요청 및 응답에 대한 정보를 기록하는 로그입니다. 이를 통해 애플리케이션의 동작 상태를 파악하고 문제를 해결하는 데 유용하게 사용됩니다.
1. Tomcat Access Log 사용 목적
💡 가장 주요한 사용 목적은 HTTP 요청 및 응답 정보를 기록하므로, 애플리케이션의 동작 상태를 파악하고 문제를 해결하는 데 유용하게 사용됩니다.
- 애플리케이션의 동작 상태 파악
- 애플리케이션의 성능 분석
- 보안 이슈 파악
- 사용자 행동 분석
2) Access Log의 구성 요소
💡 Access Log의 구성요소에 대해서 이해합니다.
1. 구성 요소의 종류
구성요소 | 약어 | 설명 |
Remote Host | %a | HTTP 요청을 보낸 클라이언트의 IP 주소 |
Timestamp | {yyyy-mm-dd HH:mm:ss} | HTTP 요청이 발생한 시간 |
Request Line | %r | HTTP 요청 메서드, URL 및 HTTP 버전 |
Status Code | %s | HTTP 응답 상태 코드 |
Response Size | %b | HTTP 응답 본문의 크기 |
Referer | %{Referer}i | HTTP 요청을 보낸 페이지의 URL |
User Agent | %{User-agent}i | HTTP 요청을 보낸 클라이언트의 브라우저 정보 |
// 구성요소로 예시
%{yyyy-MM-dd HH:mm:ss}t\\t%s\\t%r\\t%{User-Agent}i\\t%{Referer}i\\t%a\\t%b
[ 더 알아보기 ]
💡 accesslog의 Pattern의 종류
- 구성 요소에 따라서 각각의 패턴을 구성하는 방법도 존재하지만 이미 구성되어 있는 패턴을 이용하는 방법이 있습니다.
1. common의 로그 형식의 경우 LogFormat "%h %l %u %t \"%r\" %>s %b" - common 를 가집니다.
2. combined의 로그 형식의 경우 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined 를 가집니다.
[출처]
2. 예시를 통한 구성요소
💡 로그 전체의 출력된 사항 예시입니다.
2022-11-17 09:44:40 200 POST /api/v1/user/selectUser HTTP/1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 <http://localhost:8000/> 0:0:0:0:0:0:0:1 241
💡 로그 전체 사항에 대한 상세 구성요소에 대한 설명입니다.
// Timestamp : 요청이 발생한 시간
2022-11-17 09:44:40
// Status Code: HTTP 응답 상태 코드
200
// Remote Host: HTTP 요청을 보낸 클라이언트의 IP 주소
POST /api/v1/user/selectUser
// Request Line: HTTP 요청 메서드, URL 및 HTTP 버전
HTTP/1.1 Mozilla/5.0
// User Agent : HTTP 요청을 보낸 클라이언트의 브라우저 정보
(Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
// Referer: HTTP 요청을 보낸 페이지의 URL
<http://localhost:8000/>
// Response Size: HTTP 응답 본문의 크기
0:0:0:0:0:0:0:1 241
3) Access Log 환경 설정
💡 해당 페이지에서는 Spring Boot 환경 내에서 application.properties 파일 내에 환경 설정을 하는 방법에 대해서 공유합니다.
1.application.properties 파일에 저장하는 경우
💡 해당 파일 구성은 Timestamp / Status Code / Remote Host / Request Line / User Agent / Referer / Response Size 모든 구성요소가 출력되도록 구성이 되었습니다.
# 일 별 Access Log를 설정합니다.
server.tomcat.basedir=.
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%{yyyy-MM-dd HH:mm:ss}t\\t%s\\t%r\\t%{User-Agent}i\\t%{Referer}i\\t%a\\t%b
[ 더 알아보기 ]
💡 server.tomcat.basedir=. 속성
- 해당 속성은 Tomcat이 로그 파일을 기록할 디렉터리를 지정합니다. 만약 값을 설정하지 않으면, Tomcat은 기본 디렉터리인 $CATALINA_BASE/logs를 사용합니다. 또한, .을 설정하면 실행 중인 애플리케이션의 루트 디렉터리에 로그 파일을 기록합니다.
💡 server.tomcat.accesslog.enabled 속성
- 해당 속성은 Tomcat이 Access Log를 사용할지 여부를 지정합니다. 이 속성은 true로 설정해야 Access Log가 기록됩니다.
💡server.tomcat.accesslog.pattern 속성
- 해당 속성은 Access Log의 구성 요소를 지정하는 패턴입니다. 이 속성을 사용하여 Access Log에 포함될 정보를 지정할 수 있습니다. common, combined 등 이미 지정된 패턴을 사용할 수 있습니다.
2. 결과 확인
1. 환경 구성을 한 후로 아래와 같이 access_log 파일이 생성되었습니다
2. postman을 이용하여 실제 전송을 하였을 때의 테스트를 진행합니다
💡 postman을 이용하여서 서버로 HTTP 요청을 보냈습니다.
💡 해당 요청한 로그가 출력이 잘됨을 확인하였습니다.
4) 참고
1. Access Log 관련 속성들
이름 | 설명 | 기본값 |
server.tomcat.accesslog.buffered | 주기적으로만 플러시되도록 출력을 버퍼링할지 여부입니다. | true |
server.tomcat.accesslog.check-exists | 외부 프로세스에서 이름을 바꾼 경우 다시 생성할 수 있도록 로그 파일 존재 여부를 확인할지 여부입니다. | false |
server.tomcat.accesslog.condition-if | "ServletRequest.getAttribute(conditionIf)"가 null을 생성하지 않는 경우에만 요청 로깅을 활성화할지 여부입니다. | |
server.tomcat.accesslog.condition-unless | "ServletRequest.getAttribute(conditionUnless)"가 null을 생성하는 경우에만 요청 로깅을 활성화할지 여부입니다. | |
server.tomcat.accesslog.directory | 로그 파일이 생성되는 디렉터리입니다. Tomcat 기본 디렉토리에 대해 절대적이거나 상대적일 수 있습니다. | logs |
server.tomcat.accesslog.enabled | 액세스 로그를 활성화합니다. | false |
server.tomcat.accesslog.encoding | 로그 파일에서 사용하는 문자 집합입니다. 시스템 기본 문자 집합이 기본값입니다. | |
server.tomcat.accesslog.file-date-format | 로그 파일 이름에 넣을 날짜 형식입니다. | .yyyy-MM-dd |
server.tomcat.accesslog.ipv6-canonical | RFC 5952에 정의된 대로 IPv6 표준 표현 형식을 사용할지 여부입니다. | false |
server.tomcat.accesslog.locale | 로그 항목 및 로그 파일 이름 접미사의 타임스탬프 형식을 지정하는 데 사용되는 로케일입니다. Java 프로세스의 기본 로캘이 기본값입니다. | |
server.tomcat.accesslog.max-days | 액세스 로그 파일이 제거되기 전에 보관할 일 수입니다. | -1 |
server.tomcat.accesslog.pattern | 액세스 로그의 형식 패턴입니다. | common |
server.tomcat.accesslog.prefix | 로그 파일 이름 접두사. | access_log |
server.tomcat.accesslog.rename-on-rotate | 회전 시간까지 파일 이름에 날짜 스탬프 포함을 연기할지 여부입니다. | false |
server.tomcat.accesslog.request-attributes-enabled | 요청에 사용되는 IP 주소, 호스트 이름, 프로토콜 및 포트에 대한 요청 속성을 설정합니다. | false |
server.tomcat.accesslog.rotate | 액세스 로그 회전을 활성화할지 여부입니다. | true |
server.tomcat.accesslog.suffix | 로그 파일 이름 접미사. | .log |
💡 Access Log 뿐만 아니라 Slf4j - Log4j2 기반의 로깅 설정에 대해서도 궁금하시면 아래의 링크를 확인하시면 크게 도움이 됩니다.
오늘도 감사합니다. 😀
반응형
'Java > Spring Boot' 카테고리의 다른 글
[Java] Spring Boot Cache 이해하고 설정하기 -1 : 정의, 환경 설정 (2) | 2023.04.16 |
---|---|
[Java] Spring Boot AOP(Aspect-Oriented Programming) 이해하고 설정하기 (2) | 2023.03.01 |
[Java] Spring Boot Security 이해하기 -4: JWT 환경 설정 및 구성 하기 (4) | 2023.01.01 |
[Java] Spring Boot Security 이해하기 -3: JWT(JSON Web Token) 이해하기 (0) | 2022.12.21 |
[Java] Spring Boot Security 이해하기 -2 : Spring Boot 2.x 버전 환경 구성하기 (0) | 2022.12.18 |