将错误记录到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附加程序不是一个记录到Stackdriver的日志,但是STDOUT足够(也许是Kubernetes集群吗?),但是问题仍然存在
答案 0 :(得分:1)
Kubernetes的Stackdriver Logging代理配置对于写入容器标准输出的所有日志默认为INFO,对于写入stderr的日志默认为ERROR。如果您想对严重性进行更细粒度的控制,可以将Spring配置为以单行JSON格式记录(例如,通过ps = Sidekiq::ProcessSet.new
ps.size # => 2
ps.each do |process|
p process['busy'] # => 3
p process['hostname'] # => 'myhost.local'
p process['pid'] # => 16131
end
1 ),并让日志记录代理从JSON对象(请参见https://cloud.google.com/logging/docs/agent/configuration#process-payload)。
1 默认情况下,JsonLayout
将使用“级别”作为日志级别,而Stackdriver日志记录代理recognizes的“严重性”,因此您可能必须覆盖{ {1}}。
答案 1 :(得分:0)
在每种情况下,直接使用Google Cloud Logging Logback Appender会从日志级别获取严重性:
在Maven中:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-logging-logback</artifactId>
<version>0.116.0-alpha</version>
</dependency>
在logback.xml中:
<appender name="Cloud" class="com.google.cloud.logging.logback.LoggingAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<log>YOUR_LOG_NAME</log>
<resourceType>container</resourceType>
<flushLevel>INFO</flushLevel>
</appender>
...
<logger name="org.springframework" level="WARN" additivity="true">
<appender-ref ref="Cloud"/>
</logger>
它不是弹簧云组件,但可以解决问题。