【问题标题】:read log4j properties with typesafe config使用类型安全配置读取 log4j 属性
【发布时间】:2015-09-18 10:48:35
【问题描述】:

我制作了一个非常标准的 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,关于如何使用属性配置器使其工作,我将其保持打开状态,因为它是关于使用 ConfigFactory。

【问题讨论】:

  • 你能检查一下jar中的文件名吗?是log4j-executor.properties 还是log4j.properties?我很困惑,因为您在问题中使用了两个不同的文件名。

标签: scala apache-spark log4j typesafe-config


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我尝试了以上所有方法都没有结果,请检查我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
相关资源
最近更新 更多