java - Spark 应用程序记录器

标签 java apache-spark log4j

我试图让我的 Spark 应用程序登录到它自己的日志文件中,我不希望我的所有内容与 Spark 的内容混合在一起,它不可读。

由于 Spark 库的兼容性,我放弃使用 Logback,因此我选择使用 log4j。我在 java 应用程序的 src/main/resources 中创建了自定义 log4j.properties,但是当我启动 jar 的 Spark-submit 时,我的所有日​​志都写入了 Spark 的工作日志文件中。它接缝了我的 jar 内的自定义 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

有谁知道如何分离两个日志?

最佳答案

请在 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

关于java - Spark 应用程序记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52427806/

相关文章:

scala - SparkSQL - 直接读取 Parquet 文件

java - 如何在java中使用log4j创建附加日期和时间的日志文件?

jboss 作为 5.1 logback slf4j log4j

java - 在 Hibernate @Generate 注释中使用 GenerationTime.INSERT 的合理场景是什么?

java - 带有 Maven 的 Axis2

java - Hortonworks中关于yarn的Wordcount示例失败

performance - 在 Apache Spark 上迭代运行查询

java - 在 apache flink 中获取 JSON 数据作为输入流

java - 根据组件对 JPanel 进行排序

java - 如何查看在 docker 容器内运行的 log4j 日志?