python - 使用 log4j conversionpattern 进行 Pyspark 日志记录不起作用

标签 python logging apache-spark log4j pyspark

使用 log4j 更改日志格式时,我在登录 Spark (pyspark) 时遇到问题。我已经编辑了 log4j.properties 中的 ConversionPattern,但它无法正常工作。写入日志时,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

正如您所看到的,在 event_severity 之后,它并没有像应该的那样替换级别。

下面是我的 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 吗? Log4j 2 正在积极维护,而 Log4j 1.x 已结束生命。

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

最近,Log4j 2 已开始支持 Log4j 1.2 格式的配置文件。

Log4j 1.2 is broken in Java 9 起,鼓励所有项目单独迁移到 Log4j 2 .

看来Spark迁移到Log4j 2是in progress

关于python - 使用 log4j conversionpattern 进行 Pyspark 日志记录不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37926166/

相关文章:

python - 不是 Python 中的 None 测试

git log 输出日志文件

node.js - Firebase 函数 : logging with winston in stackdriver console

java - 在 SLF4J 中格式化 float

scala - 在窗口 apache Spark 中将滞后与行计算相结合

java - pyspark:从 pyspark 调用自定义 java 函数。我需要 Java_Gateway 吗?

gradle - 如何解决使用不同版本库的模块之间的依赖关系?

Python27 - 将元组时间转换为日期时间对象

python - django中的自动增量值

python - South/Django 问题 : not recognizing the Django App