GCP и Spring logback. Серьезность всегда информация

При регистрации ошибок в стеке драйвера каждое сообщение регистрируется как INFO, даже при использовании log.error или log.warn и т. Д., Но полезная нагрузка правильная.

Я хотел бы иметь возможность фильтровать по серьезности и получать электронную почту при ошибке.

Я использую Spring Boot и Logback. Приложение было развернуто в кластере Kubernetes на GCP.

Вот мой 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>

И вот добавленный dep в Maven

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>

Версия Spring Boot: 2.1.3. РЕЛИЗ
Версия Spring Cloud: Гринвич. РЕЛИЗ

Что не так с этим конфигом? Есть ли другое решение?

РЕДАКТИРОВАТЬ: Только что понял, что вышеописанное приложение STACKDRIVER не входит в Stackdriver, но достаточно STDOUT (может быть, это кластер Kubernetes?), Но проблема остается.

1 ответ

Конфигурация агента журналирования Stackdriver для Kubernetes по умолчанию имеет значение INFO для любых журналов, записанных в стандартный вывод контейнера, и ERROR для журналов, записанных в stderr. Если вы хотите более детальный контроль над серьезностью, вы можете настроить Spring для регистрации в виде однострочного JSON (например, через JsonLayout1) и позвольте агенту ведения журнала определить серьезность объекта JSON (см. https://cloud.google.com/logging/docs/agent/configuration).

1 По умолчанию JsonLayout будет использовать "уровень" для уровня журнала, в то время как агент ведения журнала Stackdriver распознает "серьезность", поэтому вам, возможно, придется переопределить addCustomDataToJsonMap,

См. Также GKE & Stackdriver: формат ведения журнала обратной связи Java?

При непосредственном использовании google cloud logging appender 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>

Это не компонент весеннего облака, но он решает проблему.

Другие вопросы по тегам