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 (например, через JsonLayout
1) и позвольте агенту ведения журнала определить серьезность объекта 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>
Это не компонент весеннего облака, но он решает проблему.