我制作了一个非常标准的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。
答案 0 :(得分:1)
您的代码只是将属性读入Config
对象,但这不会影响log4j,后者不知道Typesafe配置。它应该读取属性文件并单独使用它。你应该:
log4j.properties
是否在src/main/resources
中并正确添加到jar中; -Dlog4j.debug
中传递spark.executor.extraJavaOptions
以查看初始化期间发生的情况; configure
方法之一明确使用PropertyConfigurator
。