Перейти к основному содержимому

Журналы Spring Boot Embedded Tomcat

· 4 мин. чтения

1. Введение

Spring Boot поставляется со встроенным сервером Tomcat, что очень удобно. Однако по умолчанию мы не можем видеть журналы Tomcat.

В этом руководстве мы узнаем, как настроить Spring Boot для отображения внутренних журналов и журналов доступа Tomcat через игрушечное приложение.

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

Точно так же мы можем использовать аргументы виртуальной машины для включения журналов доступа:

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 — идентификатор пользователя

%u — имя пользователя, определенное HTTP-аутентификацией

%t – время получения запроса

%r – строка запроса от клиента, в данном случае GET /greetings/Harry HTTP/1.1

%>s – код состояния, отправленный с сервера клиенту, например, 200 здесь

%b – размер ответа клиенту или 27 для этих запросов

Поскольку в этом запросе не было аутентифицированного пользователя, %l и %u напечатали тире.

На самом деле, если какая-либо информация отсутствует, Tomcat напечатает прочерк для этого слота .

4.2. Настройка журналов доступа

Мы можем переопределить конфигурацию Spring Boot по умолчанию, добавив несколько свойств в application.properties.

Во-первых, чтобы изменить имя файла журнала по умолчанию:

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 org.apache.coyote.RequestInfo@1e6f89ad 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 .