首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring日志记录和Google平台日志查看器

Spring日志记录和Google平台日志查看器
EN

Stack Overflow用户
提问于 2020-02-07 14:51:47
回答 1查看 5K关注 0票数 8

我正在Google平台中运行一个Spring应用程序,并查看日志文件,查看。在使用Spring之前,只使用简单servlet,日志记录条目将显示为:

将对每个请求进行分组,并通过展开行来查看该请求的所有日志信息。但是,当使用Spring时,请求不再分组,日志条目只是逐行显示。当有多个请求时,日志条目会变得非常混乱,因为不可能以分组的方式查看它们。我的logging.properties设置也是这样的:

代码语言:javascript
复制
.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

Logger在每个类中初始化如下:

代码语言:javascript
复制
private static final java.util.logging.Logger LOG = java.util.logging.Logger.getLogger(MyClass.class.getName());

然后将日志API用作:LOG.info(“Message");

我不明白为什么这些语句被以不同的方式记录,不再分组,但是它必须与Spring处理日志的方式有关吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 14:56:48

自最近的运行时以来,AppEngine的行为越来越多地与基于容器的方法趋同,更多地“打开”为新的其他产品(例如Cloud )。

这有点改变了我们使用GAE开发的方式,特定的遗留库是不可用的(SearchAPI.),它也在改变日志的管理方式。

我们可以用新的运行时再现这个“嵌套日志特性”,但是我们需要自己管理它。

正如官方文件所提到的:

在日志查看器中,可以以“父-子”格式查看由相同跟踪关联的日志条目。

这意味着,如果我们检索在请求的trace HTTP头中接收到的X-Cloud-Trace-Context标识符,那么我们可以使用它来添加一个新的LogEntry,方法是将它作为trace标识符属性传递。

这可以通过使用堆栈驱动程序记录客户端库来完成

使用Spring

幸运的是,春云GCP是为了让我们的生活更轻松。

您可以找到一个实现它的样本工程。小心点,这是一个AppEngine Flexible示例,但它在Standard运行时可以很好地工作。它使用Logback

GAE Java11上运行的Spring项目中,下面的步骤如下:

  • 添加spring-cloud-gcp-starter-logging依赖项:
代码语言:javascript
复制
<!-- 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
代码语言:javascript
复制
<?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>
  • src/main/resources/application.properties中启用Spring日志功能:
代码语言:javascript
复制
spring.cloud.gcp.logging.enabled=true
  • 并在代码中使用记录器:
代码语言:javascript
复制
@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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60115784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档