Tomcat Access Log란?
- 웹 서버의 로그 파일로서 클라이언트의 HTTP 요청 및 응답에 대한 정보를 기록하는 로그입니다.
- 이를 통해 애플리케이션의 동작 상태를 파악하고 문제를 해결하는 데 유용하게 사용됩니다.
Tomcat Access Log 사용 목적
💡 가장 주요한 사용 목적은
HTTP 요청 및 응답 정보를 기록
- 애플리케이션의 동작 상태 파악
- 애플리케이션의 성능 분석
- 보안 이슈 파악
- 사용자 행동 분석
Access Log의 구성 요소
구성 요소의 종류
구성요소 약어 설명
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
공통로그형식
일반적인 common 로그 형식의 경우는 다음과 같습니다.
LogFormat "%h %l %u %t \\"%r\\" %>s %b" common
사용 예시
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
로그파일과 관련해서는 다음 문서를 참고하는 것이 좋습니다.
Access Log 환경 설정
application.properties 파일에 저장
💡 해당 파일 구성은 Timestamp / Status Code / Remote Host / Request Line / User Agent / Referer / Response Size 모든 구성요소가 출력되도록 구성이 되었습니다.
# tomcat 로그
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%
💡 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 등 이미 지정된 패턴을 사용할 수 있습니다.
결과 확인
환경 구성을 한 후로 아래와 같이 access_log 파일이 생성되었습니다.
postman을 이용하여 실제 전송을 하였을 때의 테스트를 진행합니다.
postman을 이용하여서 서버로 HTTP 요청을 보냈습니다.
해당 요청한 로그가 출력이 잘됨을 확인하였습니다.
만약 형식이 마음에 들지 않는다면 위 아파치 공식 문서를 참고하여 원하는 대로 포맷을 커스텀할 수도 있습니다.
참고
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 |
reference
'♾️Language & Framework > 🌿Spring' 카테고리의 다른 글
[Spring / trouble Shooting] - java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver (0) | 2024.02.14 |
---|---|
[Spring Boot / Trouble Shooting] - 스프링 부트 프로젝트의 외부 접속이 막혔을 때 다양 해결 방법 (0) | 2024.01.01 |
[Spring] - @ResponseEntity의 이해와 사용 방법 (0) | 2023.11.25 |
[Spring] - @RestControllerAdvice를 이용해서 예외처리 AOP 처리하기 (0) | 2023.11.24 |
[Spring] - JPA 칼럼명 카멜케이스 적용하기 (0) | 2023.11.23 |