我试图让我的spark应用程序登录自己的日志文件,我不希望我的所有东西都与Spark的东西混在一起,这是不可读的。
由于Spark库的兼容性,我放弃使用Logback,所以我选择了log4j。我在Java应用程序的src / main / resources中创建了自定义log4j.properties,但是当我启动jar的spark-submit时,所有日志都写入了Spark的工作日志文件中。它接缝了罐子中的自定义log4j.properties,被忽略了。
这是命令:
./spark-submit --jars /home/user/LIBRERIE/ORACLE/ojdbc8.jar,\
/home/user/.m3/repository/org/mongodb/spark/mongo-spark-connector_2.11/2.3.0/mongo-spark-connector_2.11-2.3.0.jar,\
/home/user/.m3/repository/org/mongodb/mongo-java-driver/3.8.1/mongo-java-driver-3.8.1.jar,\
/home/user/.m3/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar \
--class my.pkg.common.SparkHandlerStandalone \
--master spark://162.16.215.59:7077 \
--deploy-mode cluster \
/home/user/NetBeansProjects/SparkScala/target/SparkScala-1.0-SNAPSHOT.jar
我的log4j.properties:
log4j.rootLogger=DEBUG, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/home/user/TEMP/Spark/sparkapp.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L - %m%n
有人知道我如何分开两个日志吗?
答案 0 :(得分:2)
请为log4j属性文件中的自定义日志创建其他类别。
log4j.appender.customLog=org.apache.log4j.FileAppender
log4j.appender.customLog.File=/home/user/TEMP/Spark/sparkapp.log
log4j.appender.customLog.layout=org.apache.log4j.PatternLayout
log4j.appender.customLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L - %m%n
log4j.category.customLog=INFO, debugLog
log4j.additivity.customLog=false
在应用程序代码中,如下配置记录器
static final Logger customLog = Logger.getLogger("customLog");
customLog.info("Test msg")
确保在extraJava选项中设置了自定义的log4j属性。
spark.executor.extraJavaOptions=-Dlog4j.configuration=/home/hadoop/spark-conf/log4j.properties
spark.driver.extraJavaOptions=-Dlog4j.configuration=/home/hadoop/spark-conf/log4j.properties