使用typesafe config

时间:2015-09-18 10:48:36

标签: scala apache-spark log4j typesafe-config

我制作了一个非常标准的log4j文件,我想加载并使用它的属性,它被打包在应用程序jar中。

使用java.util中的属性我可以在使用yarn-client模式启动时使用它,但是使用typesafe-config,目前,log4j.properties完全被忽略。

这是log4j.properties

log4j.rootLogger=INFO, RollingAppender
log4j.rootCategory=DEBUG, file
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=log/rule.log
log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppender.layout.ConversionPattern=[%p] %d %c %M - %m%n
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout



log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1} %m%n

这是我检索属性的方法。这应该没问题,因为正确检索了其他属性。

val log = LogManager.getRootLogger()
val logCfgProps : Config =  ConfigFactory.load("log4j.properties")
val configLogProps = Option(getClass.getClassLoader.getResource("log4j.properties")).fold
{
  log.error("log4j.properties file not retrieved. Application is shutting down")
  ConfigFactory.load()
}
{ resource => ConfigFactory.load(logCfgProps)}

我尝试使用

进行登录
log.error("blabla")

在控制台上,我得到了正确的日志记录,但它没有写入文件。 我尝试添加选项--conf“spark.executor.extraJavaOptions = -Dlog4j.configuration = log4j.properties”myapp.jar建议here,但它没有任何区别。

修改

我打开了new question on SO关于如何使用Property配置器使其工作的问题,我将其保持打开状态,因为它是关于使用ConfigFactory。

1 个答案:

答案 0 :(得分:1)

您的代码只是将属性读入Config对象,但这不会影响log4j,后者不知道Typesafe配置。它应该读取属性文件并单独使用它。你应该:

  1. 检查log4j.properties是否在src/main/resources中并正确添加到jar中;
  2. 如果是,但日志记录不起作用,请在-Dlog4j.debug中传递spark.executor.extraJavaOptions以查看初始化期间发生的情况;
  3. 您还可以通过调用configure方法之一明确使用PropertyConfigurator