我有一个使用自定义log4j属性文件和级别的项目,这些文件和级别在Spark版本2.0.2或更早版本中有效。需要升级到Spark 2.2.0来解决一些性能问题,但它会破坏log4j组件。
log4j属性文件引用系统属性“current.date”,以及包中的自定义日志级别类:
player?.stop
在实例化log4j logger之前,在代码中声明了引用:
# Root logger option
log4j.rootLogger=INFO,file,file2
log4j.logger.com.package.project.PROJECTDriver=PROJECT#com.package.project.PROJECTLogLevel,file3
log4j.appender.file3=org.apache.log4j.RollingFileAppender
log4j.appender.file3.File=../../../../project/log/PROJECTUserLog_${current.date}.log
log4j.appender.file3.Append=false
log4j.appender.file3.MaxFileSize=100MB
log4j.appender.file3.MaxBackupIndex=1
log4j.appender.file3.layout=org.apache.log4j.PatternLayout
log4j.appender.file3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file3.threshold=PROJECT#com.package.project.PROJECTLogLevel
log4j.appender.file3.filter.filter1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.file3.filter.filter1.levelMax=INFO
升级到Spark 2.2.0后,Log4j开始抱怨无法找到自定义日志级别类。它也没有附加current.date值,只是将其留空。
经过一些挖掘并使用log4j调试模式后,我发现在Spark 2.2.0中,在项目代码运行之前正在配置log4j。在之前的Spark版本中,调试输出如下所示:
val dateFormat = new SimpleDateFormat("yyyyMMddhhmmss")
System.out.println("Starting Project Driver")
System.setProperty("current.date", dateFormat.format(new Date()))
var log: Logger = LogManager.getLogger("com.package.project.PROJECTDriver")
在Spark 2.2.0中,订单相反:
Starting Project Driver
log4j: *log4j configuration steps, going through the properties file*
我在Spark 2.2.0中找不到有关此更改的任何注释。有没有办法修复log4j,以便在调用记录器时启动配置?