scala - 使用 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 = Global和logName = MyApp以便我可以在全局层次结构下过滤 MyApp 日志。logName
logName
resourceType
从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"
}
解决方案
推荐阅读
- python-3.x - 如何提取类中的锚标记文本列表并使用beautifulsoup将每个文本附加到不同的列表中?
- javascript - 如何在不触发 React Table 中整行的 onClick 函数的情况下选择特定列中的一行
- git - How to modify old, pushed commit, with new commits pushed after it
- r - Why is ggplot is turning my plot into a list
- logging - Is it possible to parse nested json in sumologic?
- python-3.x - Inheritance in Python - HTMLParser
- angular - 404 page not found error while publishing Angular project on Github pages
- python-3.x - 如何创建一个 PyTables 表来存储一个巨大的方阵?
- java - 我如何在java中结束这个游戏?
- javascript - 有人可以给我简单的术语来说明如何将 Meteor 应用程序上传到 Galaxy 吗?