Log4j + Scala:如何仅记录我的自定义消息?

时间:2018-07-24 17:54:16

标签: scala apache-spark logging log4j

我有一个Spark应用程序(用Scala编写),并记录了以下代码。 我只想记录我的自定义消息,而不记录包括Spark消息在内的所有消息。

到目前为止,我有以下代码:

// creates pattern layout
var  layout = new PatternLayout()
var conversionPattern = "%-7p %d [%t] %c %x - %m%n"
layout.setConversionPattern(conversionPattern)

// creates console appender
var consoleAppender = new ConsoleAppender()
consoleAppender.setLayout(layout)
consoleAppender.activateOptions()

// creates file appender
var fileAppender = new FileAppender()
fileAppender.setFile("applog3.txt")
fileAppender.setLayout(layout)
fileAppender.activateOptions()

// configures the root logger
var rootLogger = Logger.getRootLogger
rootLogger.setLevel(Level.INFO)
rootLogger.addAppender(consoleAppender)
rootLogger.addAppender(fileAppender)

// creates a custom logger and log messages
var logger = Logger.getLogger(this.getClass())
logger.debug("this is a debug log message")
logger.info("this is a information log message")
logger.warn("this is a warning log message")
logger.trace("this is a TRACE log message")

if (arg.length < 8) {
  logger.error("=> wrong parameters number")
  System.err.println("Parameters ....")
  System.exit(1)
}

但是我不仅可以看到我的消息,还可以看到与Spark有关的其他消息。例如:

INFO    [task-result-getter-1] org.apache.spark.scheduler.TaskSetManager  - Finished task 1.0 in stage 5.0 (TID 6) in 631 ms on localhost (executor driver) (1/2)

问题是,我只想查看我的消息(信息,错误或任何我想记录的内容),以及从Spark记录的错误。我怎样才能通过代码做到这一点?

1 个答案:

答案 0 :(得分:0)

需要注意的两件事:

  1. 将自定义记录器的可加性设置为“ false”

logger.setAdditivity(false)

这将防止您的客户记录器的日志被父记录器重复

  1. 将root记录器的日志级别设置为“错误”

rootLogger.setLevel(Level.ERROR)

这将仅打印来自任何程序包的错误级别日志,除非您使用不同的日志级别为您的程序包/类定义了自定义记录器。

由于您已经为类/包定义了自定义记录器,因此上述步骤将生成您期望的日志。