Рубрики
Без рубрики

Spring Boot Встроенные журналы Tomcat

Журналы Tomcat по умолчанию отключены при весенней загрузке. Вот как их включить и настроить.

Автор оригинала: baeldung.

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/привет//HTTP | 1.1
в этом случае %>s |/- код состояния, отправленный с сервера клиенту, например
200 здесь
%b – размер ответа клиенту, или
27 для этих запросов

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

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

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

Мы можем переопределить конфигурацию загрузки Spring по умолчанию, добавив несколько свойств в 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 [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 .