читать свойства log4j с конфигурацией typesafe

Я сделал довольно стандартный файл 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 здесь, но это не имеет никакого значения.

РЕДАКТИРОВАТЬ

Я открыл новый вопрос о SO о том, как использовать конфигуратор свойств, чтобы заставить его работать, я оставляю это открытым, поскольку речь шла об использовании ConfigFactory.


person Irene    schedule 18.09.2015    source источник
comment
Не могли бы вы проверить имя файла в банке? Это log4j-executor.properties или log4j.properties? Я смущен, потому что вы использовали два разных имени файла в своем вопросе.   -  person zsxwing    schedule 18.09.2015


Ответы (1)


Ваш код просто считывает свойства в объект Config, но это не влияет на log4j, который понятия не имеет о Typesafe Config. Он должен прочитать файл свойств и использовать его самостоятельно. Вам следует:

  1. Убедитесь, что log4j.properties находится в src/main/resources и правильно добавлено в банку;
  2. Если это так, но регистрация не работает, передайте -Dlog4j.debug в spark.executor.extraJavaOptions, чтобы увидеть, что происходит во время инициализации;
  3. Вы также можете явно использовать PropertyConfigurator, вызвав один из его configure методов.
person Alexey Romanov    schedule 18.09.2015
comment
Спасибо, я пробовал все вышеперечисленное безрезультатно, пожалуйста, проверьте мои правки - person Irene; 20.10.2015