만쥬의 개발일기
article thumbnail

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

 

로그파일과 관련해서는 다음 문서를 참고하는 것이 좋습니다.

 

로그파일 - Apache HTTP Server Version 2.4

로그파일 이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요. 효율적으로 웹서버를 관리하려면 발생하는 문제와 함께 서버의 활동과 성능에 대해 알아야 한다.

httpd.apache.org


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

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!