【发布时间】:2017-12-20 15:22:19
【问题描述】:
我想用 log4j 登录 maprDB 一个 spark 作业。我已经编写了一个自定义附加程序,这里是我的 log4j.properties:
log4j.rootLogger=INFO,标准输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.MapRDB=com.datalake.maprdblogger.Appender
log4j.logger.testest=警告,MapRDB
放到src/main/resources目录
这是我的主要方法:
object App {
val log: Logger = org.apache.log4j.LogManager.getLogger(getClass.getName)
def main(args: Array[String]): Unit = {
// custom appender
LogHelper.fillLoggerContext("dev", "test", "test", "testest", "")
log.error("bad record.")
}
}
当我在没有任何配置的情况下运行 spark-submit 时,什么也没有发生。就像我的 log4j.properties 不在这里一样。
如果我手动部署我的 log4j.properties 文件并添加选项:
--conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/PATH_TO_FILE/log4j.properties
--conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/PATH_TO_FILE/log4j.properties
效果很好。为什么没有这些选项它就不起作用?
【问题讨论】:
-
您使用什么构建工具?路径不应该是
src/main/resources吗? -
我也认为
log4j.appender.stdout.Target(大写)应该是log4j.appender.stdout.target(小写)。 -
如果我明确设置路径,log4j.properties 工作得很好。问题是火花和他的 log4j.properties 是首先选择的。
-
使用
-Dlog4j.debug并查看 log4j 搜索属性的位置。 -
$SPARK_HOME/conf/log4j.properties
标签: scala apache-spark logging log4j mapr