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

При записи ошибок в stackdriver каждое сообщение регистрируется как 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>

А вот и деп, добавленный в Maven

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

Версия Spring Boot: 2.1.3.RELEASE
Версия Spring Cloud: Greenwich.RELEASE

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


person CCC    schedule 22.04.2019    source источник
comment
Вам нужен логбэк для логов отдельно? Вы можете сохранить это в application.yml, поскольку используете Spring Boot. Отметьте это mkyong.com/spring-boot/spring- boot-slf4j-logging-example   -  person Arun    schedule 23.04.2019


Ответы (2)


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

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

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

person Igor Peshansky    schedule 29.04.2019
comment
Я расширил JsonLayout и переопределил addCustomDataToJsonMap, добавив серьезности карте, а затем изменил xml, используя этот макет для ConsoleAppender, но, хотя я вижу его локально, я не вижу его в StackDriver - person CCC; 06.05.2019
comment
Этот другой ответ SO сделал это, хотя :) - person CCC; 06.05.2019

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

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

person Pau García    schedule 05.11.2019
comment
Самая базовая конфигурация: ‹имя приложения = CLOUD class = com.google.cloud.logging.logback.LoggingAppender /› ‹root level = DEBUG› ‹appender-ref ref = CLOUD /› ‹/root› - person jeadonara; 19.12.2020