Регистрация драйверов стека с помощью SLF4J не выполняется надлежащим образом в Scala - PullRequest
2 голосов
/ 01 октября 2019

Я использую Logback с SLF4J для регистрации в Stackdriver, и я следую примеру из Google Cloud . Мое приложение написано на Scala и работает в кластере Dataproc на GCP.

logback.xml имеет следующее содержимое.

<configuration>
  <appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
    <!-- Optional : filter logs at or above a level -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>
    <log>application.log</log> <!-- Optional : default java.log -->
    <resourceType>gae_app</resourceType> <!-- Optional : default: auto-detected, fallback: global -->
    <enhancer>com.company.customer.utils.MyLoggingEnhancer</enhancer> <!-- Optional -->
    <flushLevel>WARN</flushLevel> <!-- Optional : default ERROR -->
  </appender>

  <root level="info">
    <appender-ref ref="CLOUD" />
  </root>
</configuration>

, а MyLoggingEnhancer равен

package com.company.customer.utils

import com.google.cloud.logging.LogEntry.Builder
import com.google.cloud.logging.LoggingEnhancer

class MyLoggingEnhancer extends LoggingEnhancer {

  override def enhanceLogEntry(builder: Builder): Unit = {
    builder
      .addLabel("test-label-1", "test-value-1") //also not showing on the stack driver
  }
}

ИЯ создаю объект журналирования в классах

 private val LOGGER: Logger = LoggerFactory.getLogger(this.getClass)

И я записал сообщение от объекта регистратора, например

LOGGER.info("Spark Streaming Started for MyApplication")

Проблема в том, что resourceType и logName неправильно установлены в журналах драйвера стека. logName автоматически устанавливается на yarn-userlogs , а resourceType устанавливается на cloud_dataproc_cluster . Я хочу установить resourceType = Global и logName = MyApp так что я могу отфильтровать журналы MyApp в глобальной иерархии.

Я пытался после удаления этой строки из logback.xml

<resourceType>gae_app</resourceType>

и добавив эту строку

<resourceType>global</resourceType>

но не повезло. Любой вид помощи высоко ценится. Метка test-label-1 , которую я предоставляю, находится в LoggingEnhancer, также не отображается в драйвере стека.

Моя полезная нагрузка Json в драйвере стека равна

{
insertId: "gn8clokwpjqptwo5h"
jsonPayload: {
    application: "application_1568634817510_0189"
    class: "com.MyClass"
    container: "container_e01_1568634817510_0189_01_000001"
    container_logname: "stderr"
    filename: "application_1568634817510_0189.container_e01_1568634817510_0189_01_000001.stderr"
    message: "Spark Streaming Started for MyApplication"
}
labels: {
    compute.googleapis.com / resource_id: "1437319101399877659"
    compute.googleapis.com / resource_name: "e-spark-w-2"
    compute.googleapis.com / zone: "us"
}
logName: "projects/myProject/logs/yarn-userlogs"
receiveTimestamp: "2019-10-01T05:25:16.044579001Z"
resource: {
    labels: {
        cluster_name: "shuttle-spark"
        cluster_uuid: "d1557db6-72ee-4873-a276-4bd4ea0e89bb"
        project_id: "MyProjectId"
        region: "us"
    }
    type: "cloud_dataproc_cluster"
}
severity: "INFO"
timestamp: "2019-10-01T05:25:10Z"
}
...