禁止特定的Spark日志消息

时间:2017-08-17 21:39:10

标签: apache-spark logging log4j

TL; DR是否可以在不破坏所有日志的情况下抑制单个Spark日志消息?

我在EMR上运行Spark Streaming作业,并获取日志消息,如:

17/08/17 21:09:00 INFO TaskSetManager: Finished task 101.0 in stage 5259.0 (TID 315581) in 17 ms on ip-172-31-37-216.ec2.internal (107/120) 17/08/17 21:09:00 INFO MapPartitionsRDD: Removing RDD 31559 from persistence list 17/08/17 21:09:00 INFO DAGScheduler: Job 2629 finished: foreachPartition at StreamingSparkJob.scala:52, took 0.080085 s 17/08/17 21:09:00 INFO DAGScheduler: ResultStage 5259 (foreachPartition at StreamingSparkJob.scala:52) finished in 0.077 s 17/08/17 21:09:00 INFO JobScheduler: Total delay: 0.178 s for time 1503004140000 ms (execution: 0.084 s)

在开发的这个阶段,这些都没有帮助,并且掩盖了我的应用程序故意发出的真实日志记录。我想阻止Spark发出这些日志消息,或者禁止他们录制。

AWS客户支持和各种答案(e.g.)表明,这可以通过在群集创建时传递一些JSON配置来实现。但是,由于这是一个流媒体作业(理想情况下,群集将永远保持不变并且只是重新部署),我想通过spark-submit选项找到一些方法来配置它。 / p>

其他回复(e.g.e.g.)表明可以通过提交设置log4j.properties的{​​{1}}文件来完成此操作。但是,this link表明log4j.rootCategory=WARN, <appender>rootCategory相同,所以我将此解释为限制所有日志记录(不仅仅是Spark&#39; s)到rootLogger - 事实上,当我部署一个改变时,这就是所观察到的。

我注意到here的最后一段说&#34; Spark使用log4j进行记录。您可以通过在WARN目录中添加log4j.properties文件来配置它。一种方法是复制位于那里的现有conf&#34;。我即将尝试使用此功能来查看是否会抑制填充我们日志记录的log4j.properties.template日志。但是,这仍然不是一个理想的解决方案,因为 某些INFO日志,Spark发出 有用的日志 - 例如,当它记录数量时每次流式迭代(从S3获取)的文件。所以,我理想的是:

  • 可以切换为禁用Spark的日志消息的特定类的配置标志,而不会抑制所有INFO日志
  • A&#34;禁止与此正则表达式匹配的所有日志记录&#34;选项,我们可以根据需要进行更新,以过滤掉我们对
  • 不感兴趣的邮件

这些都存在吗?

(为了解决可能的反应 - 我不愿在INFO及以上的地方从我自己的应用程序发出日志)

1 个答案:

答案 0 :(得分:1)

您可以通过log4名称spspce从log4j.properties控制日志,这是一个示例:

log4j.rootLogger=WARN, console
# add a ConsoleAppender to the logger stdout to write to the console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# use a simple message format
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# set the log level for these components
log4j.logger.org.apache.spark=WARN
log4j.logger.org.spark-project=ERROR
log4j.logger.org.apache.hadoop=ERROR
log4j.logger.io.netty=ERROR
log4j.logger.org.apache.zookeeper=ERROR