使用Scala和logback配置Apache Spark Logging

use*_*078 4 logback log4j2 apache-spark

我对使用Apache Spark设置日志记录非常困惑.Apache spark使用Log4j进行日志记录,它会生成大量的日志数据.有没有办法为spark日志设置log4j并使用logback进行应用程序日志.我非常熟悉logback,但似乎 spark只支持log4j.下面的代码工作正常,直到我介绍了apache spark.在这方面的任何帮助都会有所帮助.

import com.typesafe.scalalogging.LazyLogging

import scala.util.{Failure, Success}
import scala.xml.{Elem, XML}



object MainApp extends App with LazyLogging  {



  val currency = new YahooCurrencyLoader() with CurrencyParameters
  val ccy = currency.getXML(currency.ccyUrl) match {

    case Success(v) => XML.save("PreviousRun.xml",v); logger.info("XML has been saved for use")
    case Failure(ex) => logger.error("XML extraction failed. Look at Yahoo extraction class. ${ex.getMessage}" )

  }

  val xmllocation: String = "./PreviousRun.xml"
  val loadxml: Elem = XML.loadFile(xmllocation)
  //print(loadxml)
  //print(currency.findCurrency(loadxml,"GBP"))

  logger.info("USD CAD Cross is " + currency.findCurrency(loadxml,"CAD").head)
Run Code Online (Sandbox Code Playgroud)

Ata*_*ais 16

我不知道你是否使用sbt或者maven它应该从哪里开始.我自己使用sbt所以我会举例说明我们是如何解决这个问题的.

1. Apache Spark使用log4j 1.2.xx

这是真的,如果您不想使用相同的日志记录实现,那确实存在问题.但是有帮助!

首先,从spark依赖项中排除以下库:

  • log4j
  • slf4j-log4j12

对于sbt(使用sbt-assembly),它看起来像这样:

lazy val spark16 = Seq("spark-core", "spark-sql", "spark-hive")
  .map("org.apache.spark" %% _ % "1.6.1")
  .map(_.excludeAll(
    ExclusionRule(name = "log4j"),
    ExclusionRule(name = "slf4j-log4j12")
  ))
Run Code Online (Sandbox Code Playgroud)

2.将log4j日志重定向到slf4j

可在此处找到详细说明:https://www.slf4j.org/legacy.html
我们感兴趣的模块是:log4j-over-slf4j

log4j-over-slf4j模块包含最广泛使用的log4j类的替换,即org.apache.log4j.Category,org.apache.log4j.Logger,org.apache.log4j.Priority,org.apache.log4j.Level,org.apache.log4j. MDC和org.apache.log4j.BasicConfigurator.这些替换类将所有工作重定向到相应的SLF4J类.

因此,我们可以将所有日志重定向回到slf4j其他日志记录实现可以从中获取的日志.

简单,只需将此依赖项添加到您的应用程序

"org.slf4j" % "log4j-over-slf4j" % "1.7.25"
Run Code Online (Sandbox Code Playgroud)

3.添加所需的日志实现

在我们的例子中它(像你的一样)logback,所以我们将其添加为依赖:

"ch.qos.logback" % "logback-classic" % "1.2.3"
Run Code Online (Sandbox Code Playgroud)

logback.xml在类路径中添加一些配置,例如in src/main/resources和enjoy!

火花提交

如果您Logback在部署应用程序时需要帮助,spark-submit请按照以下答案操作:https://stackoverflow.com/a/45480145/1549135