如何配置 EMR Serverless 以将 Spark 应用程序正确记录到 stdout 和 stderr

问题描述 投票:0回答:1

我目前正在 EMR 无服务器上运行 Scala Spark 应用程序,所有日志都输出到 stderr 并记录在信息级别。看看这个页面,这似乎是 Spark 的默认设置;

https://github.com/apache/spark/blob/v3.3.0/conf/log4j2.properties.template

我已经能够根据此处的信息使用这些行调整日志记录级别https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/log4j2.html

"rootLogger.level": "warn"         
"logger.myapp.name": "com.myapp",
"logger.myapp.level": "info",

但是一切仍然会输出到 stderr。我将如何配置它以使我的应用程序日志出现在标准输出中?我尝试了以下配置,但没有任何效果。

    {
      "classification": "spark-executor-log4j2",
      "configurations": [],
      "properties": {
        "rootLogger.level": "warn",
        "appender.myapp.target": "stdout",
        "appender.myapp.layout.type": "PatternLayout",
        "appender.myapp.name": "myapp",
        "appender.myapp.type": "Console",
        "logger.myapp.name": "com.myapp",
        "logger.myapp.level": "info",
        "logger.myapp.appenderRef.myappout.ref": "myapp",
        "logger.myapp.appenderRefs": "myappout"
      }
    }
scala apache-spark log4j2 emr-serverless
1个回答
0
投票

尝试定义附加程序以指向

stdout
。并确保您正确定义
PatternLayout
来控制日志消息格式。

此外,将定义的附加程序与记录器相关联。

appenderRef
应指向定义的附加程序。
然后,设置根记录器以利用正确的附加程序,如此处所示

{
  "classification": "spark-executor-log4j2",
  "configurations": [],
  "properties": {
    "rootLogger.level": "warn",
    "rootLogger.appenderRef.stdout.ref": "stdout",
    
    "appender.stdout.type": "Console",
    "appender.stdout.name": "stdout",
    "appender.stdout.layout.type": "PatternLayout",
    "appender.stdout.layout.pattern": "%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n",
    "appender.stdout.target": "SYSTEM_OUT",
    
    "logger.myapp.name": "com.myapp",
    "logger.myapp.level": "info",
    "logger.myapp.additivity": "false",
    "logger.myapp.appenderRef.stdout.ref": "stdout"
  }
}

我已将

logger.myapp.additivity
设置为
false
,以防止日志传播到根记录器,确保它们仅发送到
logger.myapp
中定义的附加程序。

stdout
附加程序与根记录器和
myapp
记录器关联,以确保来自根记录器和
myapp
记录器的日志都发送到
stdout

根记录器配置为具有

warn
级别,并将其与
stdout
附加程序关联,以确保与其他记录器不匹配的类中级别为
warn
或更高级别的所有日志都将转到
stdout

© www.soinside.com 2019 - 2024. All rights reserved.