С недавних времен выполнения AppEngine
развивается с поведением, которое все более и более сходится с подходом, основанным на контейнерах, все более и более "открытым" как новые другие продукты (например, Cloud Run).
Это немного меняет то, как мы разрабатываем с GAE
, определенные c устаревшие библиотеки недоступны (SearchAPI ...), и это также меняет способ управления журналами.
Мы можем воспроизвести эту " функцию вложенного журнала " с новой java11
средой выполнения, но нам нужно управлять ею самостоятельно.
Как Официальные документы упомянуто:
В средстве просмотра журналов записи журнала, коррелированные с одной и той же трассировкой, можно просматривать в формате «родитель-потомок».
Это означает, что если мы получить идентификатор trace
, полученный внутри заголовка HTTP X-Cloud-Trace-Context
нашего запроса, затем мы можем использовать его для добавления нового LogEntry
, передав его в качестве атрибута идентификатора trace
.
Это можно сделать с помощью клиентских библиотек ведения журналов Stackdriver
с Spring GCP
К счастью, Spring Cloud GCP призван сделать нашу жизнь проще.
Вы можете найти пример проекта , который его реализует. Будьте осторожны, это пример AppEngine Flexible
, но он будет хорошо работать с Standard
временем выполнения. Он использует Logback .
Из рабочего проекта Spring Boot на GAE Java11
необходимо выполнить следующие шаги:
- Добавить
spring-cloud-gcp-starter-logging
зависимость:
<!-- Starter for Stackriver Logging -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
- Добавление
logback-spring.xml
внутри src/main/resources
папки:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/cloud/gcp/autoconfigure/logging/logback-appender.xml" />
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<!-- If running in GCP, remove the CONSOLE appender otherwise logs will be duplicated. -->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="STACKDRIVER" />
</root>
</configuration>
- Включение функции ведения журнала Spring GCP внутри
src/main/resources/application.properties
:
spring.cloud.gcp.logging.enabled=true
- И используйте LOGGER внутри вашего кода:
@SpringBootApplication
@RestController
public class DemoApplication {
private static final Log LOGGER = LogFactory.getLog(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping()
public SomeData get() {
LOGGER.info("My info message");
LOGGER.warn("My warning message");
LOGGER.error("My error message");
return new SomeData("Hello from Spring boot !");
}
}
Результат будет в Stackdriver Logging
средстве просмотра, для appengine.googleapis.com/request_log
: