首页 > 解决方案 > 使用 SLF4J 进行堆栈驱动程序日志记录未在 scala 中正确记录

问题描述

我正在使用带有 SLF4J 的 Logback 进行 Stackdriver 日志记录,并且我正在遵循Google Cloud中的示例。我的应用程序是用 Scala 编写的,并在 GCP 上的 Dataproc 集群上运行。

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")

Stackdriver 日志中存在且未正确设置resourceType此问题。自动设置为yarn-userlogs并设置为cloud_dataproc_cluster。我想设置resourceType = GloballogName = MyApp以便我可以在全局层次结构下过滤 MyApp 日志。logNamelogNameresourceType

logback.xml.

<resourceType>gae_app</resourceType>

并通过添加这一行

<resourceType>global</resourceType>

但没有运气。任何形式的帮助都非常感谢。我提供的标签test-label-1在 LoggingEnhancer 中也没有显示在 Stackdriver 上。

我在 Stackdriver 上的 Json Payload 是

{
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"
}

标签: scalagoogle-cloud-platformslf4jgoogle-cloud-stackdrivergoogle-cloud-logging

解决方案


推荐阅读