Spring Boot 임베디드 Tomcat 로그

1. 소개

Spring Boot는 매우 편리한 임베디드 Tomcat 서버와 함께 제공됩니다. 그러나 기본적으로 Tomcat의 로그를 볼 수 없습니다.

이 튜토리얼에서는 장난감 애플리케이션을 통해 Tomcat의 내부 및 액세스 로그표시하도록 Spring Boot를 구성 하는 방법을 배웁니다 .

2. 샘플 애플리케이션

먼저 REST API를 만들어 보겠습니다. 사용자를 맞이하기 위해 GreetingsController 를 정의합니다 .

@GetMapping("/greetings/{username}") public String getGreetings(@PathVariable("username") String userName) { return "Hello " + userName + ", Good day...!!!"; }

3. Tomcat 로그 유형

임베디드 Tomcat은 두 가지 유형의 로그를 저장합니다.

  • 액세스 로그
  • 내부 서버 로그

액세스 로그는 응용 프로그램에서 처리하는 모든 요청의 기록을 유지. 이러한 로그는 페이지 조회수 및 사용자 세션 활동 과 같은 항목추적 하는 데 사용할 수 있습니다 . 반대로 내부 서버 로그 는 실행중인 애플리케이션의 문제를 해결하는 데 도움이됩니다.

4. 액세스 로그

기본적으로 액세스 로그는 활성화되지 않습니다.

하지만 application.properties에 속성을 추가하여 쉽게 활성화 할 수 있습니다 .

server.tomcat.accesslog.enabled=true

마찬가지로 VM 인수를 사용하여 액세스 로그를 활성화 할 수 있습니다.

java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar

이러한 로그 파일은 임시 디렉토리에 생성됩니다. 예를 들어, Windows에서 액세스 로그의 디렉토리는 AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \ logs 와 유사합니다.

4.1. 체재

따라서이 속성을 활성화하면 실행중인 응용 프로그램에서 다음과 같은 내용을 볼 수 있습니다.

0:0:0:0:0:0:0:1 - - [13/May/2019:23:14:51 +0530] "GET /greetings/Harry HTTP/1.1" 200 27 0:0:0:0:0:0:0:1 - - [13/May/2019:23:17:23 +0530] "GET /greetings/Harry HTTP/1.1" 200 27

다음은 액세스 로그이며 형식은 다음과 같습니다.

%h %l %u %t \"%r\" %>s %b

다음과 같이 해석 할 수 있습니다.

%의 H - 요청을 보낸 클라이언트 IP, 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1 이 때

% l – 사용자의 ID

% u – HTTP 인증에 의해 결정된 사용자 이름

% t – 요청을받은 시간

% r – 클라이언트의 요청 라인, 이 경우 GET / greetings / Harry HTTP / 1.1

%> s – 여기에서 200 과 같이 서버에서 클라이언트로 보낸 상태 코드

% b – 클라이언트에 대한 응답의 크기 또는 이러한 요청의 경우 27

이 요청에는 인증 된 사용자가 없으므로 % l 및 % u가 대시로 인쇄됩니다.

사실, 누락 된 정보가 있으면 Tomcat은 해당 슬롯에 대해 대시를 인쇄합니다 .

4.2. 액세스 로그 사용자 지정

application.properties에 몇 가지 속성을 추가하여 기본 Spring Boot 구성을 재정의 할 수 있습니다 .

먼저 기본 로그 파일 이름을 변경하려면 :

server.tomcat.accesslog.suffix=.log server.tomcat.accesslog.prefix=access_log server.tomcat.accesslog.file-date-format=.yyyy-MM-dd

또한 로그 파일의 위치를 ​​변경할 수 있습니다.

server.tomcat.basedir=tomcat server.tomcat.accesslog.directory=logs

마지막으로 로그 파일에 로그가 기록되는 방식을 재정의 할 수 있습니다.

server.tomcat.accesslog.pattern=common

Spring Boot에는 구성 가능한 속성이 몇 가지 더 있습니다.

5. 내부 로그

Tomcat 서버의 내부 로그는 서버 측 문제를 해결하는 데 매우 유용합니다.

이러한 로그를 보려면 application.properties에 아래 로깅 구성을 추가해야 합니다 .

logging.level.org.apache.tomcat=DEBUG logging.level.org.apache.catalina=DEBUG

그리고 다음과 같은 내용이 표시됩니다.

2019-05-17 15:41:07.261 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=1 2019-05-17 15:41:07.262 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=2 2019-05-17 15:41:07.278 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.modeler.Registry : Managed= Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1 ... 2019-05-17 15:41:07.279 DEBUG 31160 --- [io-40124-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute virtualHost public java.lang.String org.apache.coyote.RequestInfo.getVirtualHost() null ... 2019-05-17 15:41:07.280 DEBUG 31160 --- [io-40124-exec-1] o.a.tomcat.util.modeler.BaseModelMBean : preRegister [email protected] Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1 2019-05-17 15:41:07.292 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.http.Parameters : Set query string encoding to UTF-8 2019-05-17 15:41:07.294 DEBUG 31160 --- [io-40124-exec-1] o.a.t.util.http.Rfc6265CookieProcessor : Cookies: Parsing b[]: jenkins-timestamper-offset=-19800000 2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] o.a.c.authenticator.AuthenticatorBase : Security checking request GET /greetings/Harry 2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] org.apache.catalina.realm.RealmBase : No applicable constraints defined

6. 결론

이 빠른 기사에서는 Tomcat의 내부 로그와 액세스 로그의 차이점을 배웠습니다. 그런 다음이를 활성화하고 사용자 지정하는 방법을 살펴 보았습니다.

GitHub에서 샘플을 확인하십시오.