我有一个从 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/