apache-spark - 将 Spark 日志写入 STDOUT 而不是 STDERR

标签 apache-spark log4j

我有一个从 STDOUT 读取日志以进行进一步分析的服务。似乎将 Spark 日志写入 STDOUT 一直很困难,默认情况下,log4j 会将任何类型的日志发送到 STDERR。

有办法改变这种行为吗?

将日志从 STDERR 移动到 STDOUT 需要专门进行哪些更改?

这是我的 log4j 文件的样子:

log4j.rootLogger=INFO, FILE

log4j.appender.FILE=org.apache.log4j.RollingFileAppender

log4j.appender.FILE.File=stderr
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=....
log4j.appender.FILE.MaxFileSize=5248997
log4j.appender.FILE.MaxBackupIndex=10


log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR

最佳答案

当您执行 Spark 提交时,请在末尾添加 2>&1 。这意味着将 stderr(2) 和 stdout(1) 合并到 stdout 流中。

要通过 log4j.properties 文件执行此操作,请尝试添加以下属性。

# Log everything INFO and above to stdout
log4j.rootLogger=INFO,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=INFO
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d] %-5p %.26c [%X{testName}] [%X{akkaSource}] - %m%n

关于apache-spark - 将 Spark 日志写入 STDOUT 而不是 STDERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75452436/

相关文章:

scala - Spark DataFrame orderBy 和 DataFrameWriter sortBy,有区别吗?

java - 如何设置 log4j 属性文件?

java - 将 log4j.xml 转换为 log4j2.xml 的惰性方法

java - Java 优化器会删除空方法调用的参数构造吗?

apache-spark - pyspark session 是否存在 spark.implicits?

amazon-web-services - 使用 Scala 将 S3 中的数据读入 Spark 数据帧

java - log4j 找不到根记录器信息。这个可以吗

logging - Log4j2 无法在 WebLogic 12.2.1 中工作

apache-spark - 创建Spark数据集时无法解析给定输入列的xyz错误

apache-spark - 根据条件组合 Spark 数据框列中的多行