将错误记录到stackdriver时,即使使用log.error或log.warn等,每条消息都会记录为INFO,但有效负载是正确的。
我希望能够按严重程度进行过滤,并在出错时收到电子邮件。
我正在使用Spring Boot和Logback。该应用程序已部署在GCP上的Kubernetes群集中。
这是我的logback-spring.xml
<configuration>
<include resource="org/springframework/cloud/gcp/autoconfigure/logging/logback-appender.xml" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss, UTC} %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<springProfile name="prod,qa">
<root level="WARN">
<appender-ref ref="STACKDRIVER" />
</root>
</springProfile>
</configuration>
这是在Maven中添加的dep
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>
Spring Boot版本:2.1.3.RELEASE Spring Cloud版本:Greenwich.RELEASE
这个配置有什么问题?还有其他解决方案吗?
编辑:刚才意识到上面的STACKDRIVER appender不是登录到Stackdriver的那个,但STDOUT就足够了(也许bc它是一个Kubernetes集群?),但问题仍然存在
对于写入容器stdout的任何日志,Kubernetes的Stackdriver日志代理配置默认为INFO,对于写入stderr的日志,默认为ERROR。如果要对严重性进行更细粒度的控制,可以将Spring配置为单行JSON(例如,通过JsonLayout
1),并让日志记录代理从JSON对象中获取严重性(请参阅https://cloud.google.com/logging/docs/agent/configuration#process-payload)。
1By默认情况下,JsonLayout
将使用“level”作为日志级别,而Stackdriver日志代理recognizes将使用“severity”,因此您可能必须覆盖addCustomDataToJsonMap
。