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

Изменение уровня ведения журнала во время выполнения для приложения Spring Boot

Изучите различные способы управления уровнем ведения журнала во время выполнения в приложении Spring Boot.

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

1. введение

В этом руководстве мы рассмотрим способы изменения уровня ведения журнала приложения Spring Boot во время выполнения. Как и во многих других случаях, Spring Boot имеет встроенную функцию ведения журнала, которая настраивает его для нас. Мы рассмотрим, как настроить уровни ведения журнала запущенного приложения.

Мы рассмотрим три способа сделать это: с помощью конечной точки регистраторов привода Spring Boot, функции автоматического сканирования в Logback и, наконец, с помощью инструмента администрирования Spring Boot.

2. Привод Пружинного Ботинка

Мы начнем с использования конечной точки/ loggers Actuator для отображения и изменения уровня ведения журнала. /| логгеры Конечная точка доступна по адресу привод| логгеры/|, и мы можем получить доступ к конкретному логгеру, добавив его имя в качестве части пути.

Например, мы можем получить доступ к корневому регистратору с помощью URL-адреса http://localhost:8080/actuator/loggers/root .

2.1. Настройка

Давайте начнем с настройки вашего приложения для использования привода пружинной загрузки.

Во-первых, нам нужно добавить зависимость Spring Boot Actuator Maven в ваш pom.xml файл:


    org.springframework.boot
    spring-boot-starter-actuator
    2.4.0

Начиная с Spring Boot 2.x, большинство конечных точек по умолчанию отключены , поэтому нам также необходимо включить/| регистраторы конечную точку в нашем файле application.properties :

management.endpoints.web.exposure.include=loggers
management.endpoint.loggers.enabled=true

Наконец, давайте создадим контроллер с серией операторов регистрации, чтобы мы могли видеть результаты наших экспериментов:

@RestController
@RequestMapping("/log")
public class LoggingController {
    private Log log = LogFactory.getLog(LoggingController.class);

    @GetMapping
    public String log() {
        log.trace("This is a TRACE level message");
        log.debug("This is a DEBUG level message");
        log.info("This is an INFO level message");
        log.warn("This is a WARN level message");
        log.error("This is an ERROR level message");
        return "See the log for details";
    }
}

2.2. Использование конечной точки/loggers

Давайте запустим наше приложение и получим доступ к нашему API журнала:

curl http://localhost:8080/log

Затем давайте проверим журналы, в которых мы должны найти три инструкции ведения журнала:

2019-09-02 09:51:53.498  INFO 12208 --- [nio-8080-exec-1] c.b.s.b.m.logging.LoggingController      : This is an INFO level message
2019-09-02 09:51:53.498  WARN 12208 --- [nio-8080-exec-1] c.b.s.b.m.logging.LoggingController      : This is a WARN level message
2019-09-02 09:51:53.498 ERROR 12208 --- [nio-8080-exec-1] c.b.s.b.m.logging.LoggingController      : This is an ERROR level message

Теперь давайте вызовем конечную точку/ loggers Actuator, чтобы проверить уровень ведения журнала для нашего com.baeldung.spring.boot.management.logging пакета:

curl http://localhost:8080/actuator/loggers/com.baeldung.spring.boot.management.logging
  {"configuredLevel":null,"effectiveLevel":"INFO"}

Чтобы изменить уровень ведения журнала, мы можем отправить POST запрос на/ регистраторы конечную точку:

curl -i -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "TRACE"}'
  http://localhost:8080/actuator/loggers/com.baeldung.spring.boot.management.logging
  HTTP/1.1 204
  Date: Mon, 02 Sep 2019 13:56:52 GMT

Если мы снова проверим уровень ведения журнала, мы увидим, что он установлен в TRACE :

curl http://localhost:8080/actuator/loggers/com.baeldung.spring.boot.management.logging
  {"configuredLevel":"TRACE","effectiveLevel":"TRACE"}

Наконец, мы можем повторно запустить наш API журнала и увидеть наши изменения в действии:

curl http://localhost:8080/log

А теперь давайте еще раз проверим журналы:

2019-09-02 09:59:20.283 TRACE 12208 --- [io-8080-exec-10] c.b.s.b.m.logging.LoggingController      : This is a TRACE level message
2019-09-02 09:59:20.283 DEBUG 12208 --- [io-8080-exec-10] c.b.s.b.m.logging.LoggingController      : This is a DEBUG level message
2019-09-02 09:59:20.283  INFO 12208 --- [io-8080-exec-10] c.b.s.b.m.logging.LoggingController      : This is an INFO level message
2019-09-02 09:59:20.283  WARN 12208 --- [io-8080-exec-10] c.b.s.b.m.logging.LoggingController      : This is a WARN level message
2019-09-02 09:59:20.283 ERROR 12208 --- [io-8080-exec-10] c.b.s.b.m.logging.LoggingController      : This is an ERROR level message

3. Автоматическое сканирование логбэка

По умолчанию наши приложения Spring Boot используют библиотеку журналов Logback. Давайте теперь посмотрим, как мы можем воспользоваться функцией автоматического сканирования Logback, чтобы изменить уровень ведения журнала.

Во-первых, давайте добавим некоторую конфигурацию обратного входа, поместив файл с именем logback.xml в вашем каталоге src/main/resources :


    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
        
    

    

    
        
    

Ключевая деталь находится в первой строке logback.xml файл. Установив атрибут scan в значение true , мы сообщаем Logback проверить файл конфигурации на наличие изменений. По умолчанию автоматическое сканирование выполняется каждые 60 секунд.

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

Давайте попробуем это, запустив приложение и снова вызвав наш API журнала:

curl http://localhost:8080/log

Наши выходные данные должны отражать уровень INFO logging для нашего пакета:

10:21:13.167 [http-nio-8080-exec-1] INFO  c.b.s.b.m.logging.LoggingController - This is an INFO level message
10:21:13.167 [http-nio-8080-exec-1] WARN  c.b.s.b.m.logging.LoggingController - This is a WARN level message
10:21:13.168 [http-nio-8080-exec-1] ERROR c.b.s.b.m.logging.LoggingController - This is an ERROR level message

Теперь давайте изменим наш com.baeldung.spring.boot.management.logging logger в logback.xml to TRACE :

После 15 секунд давайте повторно запустим API журнала в http://localhost:8080/log и проверьте вывод журнала:

10:24:18.429 [http-nio-8080-exec-2] TRACE c.b.s.b.m.logging.LoggingController - This is a TRACE level message
10:24:18.430 [http-nio-8080-exec-2] DEBUG c.b.s.b.m.logging.LoggingController - This is a DEBUG level message
10:24:18.430 [http-nio-8080-exec-2] INFO  c.b.s.b.m.logging.LoggingController - This is an INFO level message
10:24:18.430 [http-nio-8080-exec-2] WARN  c.b.s.b.m.logging.LoggingController - This is a WARN level message
10:24:18.430 [http-nio-8080-exec-2] ERROR c.b.s.b.m.logging.LoggingController - This is an ERROR level message

4. Администратор весенней загрузки

Третий способ, которым мы собираемся изменить уровень ведения журнала, – это инструмент администрирования Spring Boot. Чтобы использовать Spring Boot Admin, нам нужно создать серверное приложение и настроить наше приложение в качестве клиента.

4.1. Приложение Администратора

Чтобы изменить уровень ведения журнала с помощью Spring Boot Admin, нам нужно будет настроить новое приложение для использования в качестве сервера администратора. Для этого мы можем использовать Spring Initializr .

Давайте добавим последнюю версию spring-boot-admin-starter-server в ваш pom.xml:


    de.codecentric
    spring-boot-admin-starter-server
    2.4.0

Подробные инструкции по настройке сервера администрирования см. в Разделе 2 нашего Руководства по администрированию Spring Boot . Кроме того, раздел 4 содержит информацию, необходимую для настройки безопасности, поскольку мы будем обеспечивать безопасность нашего клиента.

4.2. Конфигурация клиента

Как только у нас появится сервер администратора, нам нужно настроить ваше приложение в качестве клиента.

Во-первых, давайте добавим зависимость Maven для spring-boot-admin-starter-client :


    de.codecentric
    spring-boot-admin-starter-client
    2.4.0

Мы также хотим обеспечить безопасность между нашим сервером администратора и клиентом, поэтому давайте включим Spring Boot Security starter :


    org.springframework.boot
    spring-boot-starter-security
    2.4.0

Затем нам нужно внести некоторые изменения в конфигурацию наших файлов application.properties .

Сервер администратора работает на порту 8080, поэтому давайте начнем с изменения нашего порта и присвоения приложению имени:

spring.application.name=spring-boot-management
server.port=8081

Теперь давайте добавим конфигурацию, необходимую для доступа к серверу:

spring.security.user.name=client
spring.security.user.password=client

spring.boot.admin.client.url=http://localhost:8080
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin

spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name}
spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password}

Это включает в себя URL-адрес, на котором работает сервер администратора, и информацию для входа как для клиента, так и для сервера администратора.

Наконец, нам нужно включить конечные точки/ health,/info и /metrics actuator, чтобы сервер администратора мог определять статус клиента:

management.endpoints.web.exposure.include=httptrace,loggers,health,info,metrics

Поскольку изменение уровней регистратора является ПОСЛЕДУЮЩЕЙ операцией, нам также необходимо добавить небольшую конфигурацию безопасности, чтобы игнорировать защиту CSRF для конечных точек привода:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().ignoringAntMatchers("/actuator/**");
}

4.3. Использование администратора Spring Boot

После завершения настройки давайте запустим как клиентское, так и серверное приложение с помощью mvn spring-boot:run .

Давайте начнем с доступа к нашему API входа в систему по адресу http://localhost:8081/log ничего не меняя. Теперь у нас включена защита, поэтому нам будет предложено войти в систему, используя учетные данные, указанные в application.properties .

Наши выходные данные журнала должны показывать сообщения журнала, которые отражают наш уровень ведения журнала информации:

09:13:23.416 [http-nio-8081-exec-10] INFO  c.b.s.b.m.logging.LoggingController - This is an INFO level message
09:13:23.416 [http-nio-8081-exec-10] WARN  c.b.s.b.m.logging.LoggingController - This is a WARN level message
09:13:23.416 [http-nio-8081-exec-10] ERROR c.b.s.b.m.logging.LoggingController - This is an ERROR level message

Теперь давайте войдем на сервер администратора Spring Boot и изменим уровень ведения журнала. Пойдем в http://localhost:8080 и войдите в систему с учетными данными администратора. Мы перейдем в список зарегистрированных приложений, где мы должны увидеть наше spring-boot-management приложение:

Давайте выберем spring-boot-management и рассмотрим регистраторы с помощью левого меню:

Для регистратора com.baeldung.spring.boot.management.logging установлено значение INFO. Давайте изменим его на ТРАССИРОВКУ и повторно запустим наш API журнала:

Теперь наши выходные данные журнала должны отражать новый уровень регистратора:

10:13:56.376 [http-nio-8081-exec-4] TRACE c.b.s.b.m.logging.LoggingController - This is a TRACE level message
10:13:56.376 [http-nio-8081-exec-4] DEBUG c.b.s.b.m.logging.LoggingController - This is a DEBUG level message
10:13:56.376 [http-nio-8081-exec-4] INFO  c.b.s.b.m.logging.LoggingController - This is an INFO level message
10:13:56.376 [http-nio-8081-exec-4] WARN  c.b.s.b.m.logging.LoggingController - This is a WARN level message
10:13:56.376 [http-nio-8081-exec-4] ERROR c.b.s.b.m.logging.LoggingController - This is an ERROR level message

5. Заключение

В этой статье мы рассмотрели различные способы управления уровнем ведения журнала во время выполнения. Мы начали с использования встроенных приводов. После этого мы использовали функцию автоматического сканирования из Logback.

Наконец, мы узнали, как использовать администратора Spring Boot для мониторинга и изменения уровней ведения журнала в зарегистрированном клиентском приложении.

Пример кода для использования приводов и возврата в систему и для настройки Spring Boot Admin доступны на GitHub.