Python log4j转换模式下的Pyspark日志记录不工作

Python log4j转换模式下的Pyspark日志记录不工作,python,logging,apache-spark,log4j,pyspark,Python,Logging,Apache Spark,Log4j,Pyspark,在使用log4j更改日志格式时,我在spark(pyspark)中遇到了登录问题。我已经在log4j.properties中编辑了转换模式,但它不能正常工作。在编写日志时,log4j将只使用我尝试使用的模式的第一个字母。例如,我不能使用%replace,因为它只在%r上拾取,然后在输出%r后输出“eplace”。我做错了什么?这是我得到的电流输出: 2016-06-20 10:06:59,095 hostname="" client_ip="127.0.0.1" service_name=""

在使用log4j更改日志格式时,我在spark(pyspark)中遇到了登录问题。我已经在log4j.properties中编辑了转换模式,但它不能正常工作。在编写日志时,log4j将只使用我尝试使用的模式的第一个字母。例如,我不能使用%replace,因为它只在%r上拾取,然后在输出%r后输出“eplace”。我做错了什么?这是我得到的电流输出:

2016-06-20 10:06:59,095 hostname="" client_ip="127.0.0.1" service_name="" event_type="" event_status="" event_severity="INFO{WARN=medium,DEBUG=info,ERROR=high,TRACE=info,INFO=info,FATAL=critical}" event_description="[INFO] Spark - Slf4jLogger: Slf4jLogger started
正如您所看到的,在事件严重性之后,它不会像所支持的那样替换级别

下面是我的log4j.properties文件。我正在centos 7上运行python 2.7和spark 1.6.1

\# Set everything to be logged to the console
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{ISO8601} hostname="" client_ip="127.0.0.1" service_name="" event_type="" event_status="" event_severity="%p{WARN=medium,DEBUG=info,ERROR=high,TRACE=info,INFO=info,FATAL=critical}" event_description="[%p] Spark - %c{1}: %m%n

\# Settings to quiet third party logs that are too verbose
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-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

我尝试过使用EnhancedPatternLayout,但似乎没有任何效果。

您尝试过使用Log4j 2吗?log4j2是主动维护的,而log4j1.x是生命的终结

有一个适配器模块
log4j-1.2-api
,您可以将其添加到类路径中,将对log4j 1.2 api的应用程序调用委托给log4j 2实现。如果应用程序依赖于Log4j 1.2内部,则适配器可能不够

最近在Log4j 2中开始了支持Log4j 1.2格式的配置文件的工作

另外,鼓励所有项目迁移到Log4j 2


似乎Spark迁移到Log4j 2是可行的

我接受这个,因为它让我意识到Spark使用Log4j 1。我发现没有简单的方法可以将Log4j 2与Spark一起使用,因此我更改了日志的格式,以适应Log4j 1的功能。更新了答案,并介绍了适配器模块、Java 9和正在进行的Spark迁移工作。