Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Spring引导日志和Google云平台日志查看器_Google Cloud Platform_Stackdriver_Java.util.logging - Fatal编程技术网

Google cloud platform Spring引导日志和Google云平台日志查看器

Google cloud platform Spring引导日志和Google云平台日志查看器,google-cloud-platform,stackdriver,java.util.logging,Google Cloud Platform,Stackdriver,Java.util.logging,我正在Google云平台中运行Spring Boot应用程序,并在Google平台日志查看器中查看日志文件。在使用Spring Boot和简单servlet之前,日志条目将显示为: 每个请求都将被分组,通过展开行可以看到该请求的所有日志信息。然而,当使用SpringBoot时,请求不再分组,日志条目只是逐行显示。当有多个请求时,日志条目会变得非常混乱,因为无法以分组方式查看它们。我的logging.properties设置方式与此相同: .level = INFO handlers=java.

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

每个请求都将被分组,通过展开行可以看到该请求的所有日志信息。然而,当使用SpringBoot时,请求不再分组,日志条目只是逐行显示。当有多个请求时,日志条目会变得非常混乱,因为无法以分组方式查看它们。我的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
记录器在每个类别中初始化为:

private static final java.util.logging.Logger LOG = java.util.logging.Logger.getLogger(MyClass.class.getName());
然后日志API被用作: LOG.info(“我的消息”)


我不明白为什么这些语句的日志记录方式不同,不再分组,但它一定与Spring Boot处理日志记录的方式有关?

自从最近的运行时以来,
AppEngine
的行为越来越与基于容器的方法相融合,与其他新产品一样更加“开放”(例如CloudRun)

这稍微改变了我们使用
GAE
开发的方式,特定的遗留库不可用(SearchAPI…),它还改变了日志的管理方式

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

如上所述:

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

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

这可以通过使用

使用Spring GCP 幸运的是,它能让我们的生活更轻松

您可以找到一个实现它的方法。请注意,这是一个灵活的
AppEngine
示例,但它可以在
标准运行时正常工作。
它使用

GAE Java11
上的一个正在工作的Spring引导项目中,需要执行以下步骤:

  • 添加
    spring cloud gcp启动程序日志记录
    依赖项:

org.springframework.cloud

我对此也很感兴趣,过去我在stackdriver logging+app engine+spring boot上遇到过一些问题:也许这对你有用,但最终我没有“干净”的旧的解决方案谢谢,很高兴我不是唯一的一个。我尝试了各种配置,尝试使用slf4j,但没有任何区别。最终被排除在pom.xml中。通过查看Google日志查看器,您可以选择过滤器,添加标准过滤器后,将导致记录每一行,这是查看entrie的唯一方法但是它们只是没有分组。如果没有Spring Boot,它可以正常工作。我只是不知道是什么原因造成的。希望有人知道。感谢你花时间回复。我也进行了同样的检查。我的想法是,有一个底层组件正在使用stackdriver API。在我看来,我想了解app engi是如何工作的ne处理日志,我认为他们从输出中解析日志,但格式不清楚。也许使用完全相同的格式并禁用stackdriver api可能会修复它。请Adam您能提供一些其他信息吗?请:GAE runtime的java版本?java8或java11。GAE std或flexible?谢谢!Hi Thierry,我正在使用java 11和standard Environment这是我的app.yaml配置:
runtime:java11实例类:F4入站服务:-预热#显式设置Spring Boot app环境变量的内存限制和最大堆大小:JAVA工具选项:“-XX:MaxRAM=512m-XX:ActiveProcessorCount=2-Xmx128m”
谢谢你,Thierry,我明天会先试试看。谢谢你的详细回复,这很有意义。非常好,谢谢你,Thierry!工作非常完美,解释和说明非常好。Spring GCP库在将自定义日志与请求日志相关联方面做得很好,但不幸的是,请求日志是not可通过自定义日志条目进行搜索。这意味着,如果我将“Hello world”作为自定义日志记录,我将无法在stackdriver中搜索给我记录了“Hello world”的请求。如何克服此问题?
spring.cloud.gcp.logging.enabled=true