GCP和Spring登录。严重程度永远是信息

时间:2019-04-22 20:33:30

标签: spring-boot google-cloud-platform logback stackdriver spring-cloud-gcp

将错误记录到stackdriver时,即使使用log.error或log.warn等,每条消息都将记录为INFO,但是有效负载是正确的。

enter image description here

我希望能够按严重性过滤并收到有关错误的电子邮件。

我正在使用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集群吗?),但是问题仍然存在

2 个答案:

答案 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}}。

另请参阅GKE & Stackdriver: Java logback logging format?

答案 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>

它不是弹簧云组件,但可以解决问题。