使用log4j更改日志格式时遇到登录spark(pyspark)的问题。我在log4j.properties中编辑了ConversionPattern,但它无法正常工作。写日志时,log4j将只使用我尝试使用的模式的第一个字母。举个例子,我不能使用%replace,因为它只会在%r上获取,然后输出' eplace'在输出%r之后。我究竟做错了什么?这是我得到的当前输出:
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,但它似乎没有做任何事情。
答案 0 :(得分:2)
你试过Log4j 2吗? Log4j 2被主动维护,而Log4j 1.x是End of Life。
有一个适配器模块log4j-1.2-api
可以添加到类路径中,该类路径将应用程序调用委托给Log4j 1.2 API到Log4j 2实现。如果应用程序依赖于Log4j 1.2内部,那么适配器可能还不够。
最近在Log4j 2中开始工作以支持Log4j 1.2格式的配置文件。
另外,鼓励所有项目从Log4j 1.2 is broken in Java 9开始迁移到Log4j。
似乎Spark迁移到Log4j 2是in progress。