Ada*_*ton 8 java.util.logging google-cloud-platform stackdriver
我正在 Google Cloud Platform 中运行 Spring Boot 应用程序,并通过 Google Platform Logs Viewer 查看日志文件。在使用 Spring Boot 并仅使用简单的 servlet 之前,日志记录条目将显示为:
每个请求都会被分组,并且可以通过展开行来查看该请求的所有日志记录信息。然而,当使用 Spring Boot 时,请求不再分组,日志条目只是逐行显示。当存在多个请求时,日志条目会变得非常混乱,因为无法以分组方式查看它们。我以同样的方式设置了logging.properties:
.level = INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = [%1$tc] %4$s: %2$s - %5$s %6$s%n
Run Code Online (Sandbox Code Playgroud)
记录器在每个类中初始化为:
private static final java.util.logging.Logger LOG = java.util.logging.Logger.getLogger(MyClass.class.getName());
Run Code Online (Sandbox Code Playgroud)
然后日志记录 API 用作: LOG.info("My Message");
我不明白为什么这些语句以不同的方式记录并且不再分组,但它必须与 Spring Boot 处理日志记录的方式有某种关系?
自最近的运行时以来,AppEngine它的行为越来越与基于容器的方法融合,与其他新产品(例如 Cloud Run)更加“开放”。
这稍微改变了我们开发的方式GAE,特定的遗留库不可用(SearchAPI ...),并且它也改变了日志的管理方式。
我们可以用新的运行时重现这个“嵌套日志功能” java11,但我们需要自己管理它。
正如官方文档提到的:
在日志查看器中,可以以“父子”格式查看由同一跟踪关联的日志条目。
这意味着,如果我们检索请求的 HTTP 标头trace内收到的标识符X-Cloud-Trace-Context,则可以通过将LogEntry其作为标识符属性传递来使用它来添加新标识符trace。
这可以通过使用Stackdriver Logging Client 库来完成
幸运的是,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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
src/main/resources/application.properties:spring.cloud.gcp.logging.enabled=true
Run Code Online (Sandbox Code Playgroud)
spring.cloud.gcp.logging.enabled=true
Run Code Online (Sandbox Code Playgroud)
结果将显示在Stackdriver Logging查看器中,其中appengine.googleapis.com/request_log:
| 归档时间: |
|
| 查看次数: |
7416 次 |
| 最近记录: |