最近项目需要使用log4j记录日志,log4fj.properties配置文件的片段如下:
### log file ###
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.File=${PIF_CONF}/logs/retrofit.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=INFO
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n
${PIF_CONF}就配置在/etc/profile文件中,但是测试了几次,根本就没有生效,根据网友的解决方案也没有解决。
于是决定自己看log4j的源码org.apache.log4j.helpers.OptionConverter.java 文件,发现log4j 读取环境变量使用System.getProperty(),通过测试程序,发现System.getProperty("PIF_CONF") 为null,System.getenv("PIF_CONF") 确实获取到了PIF_CONF的内容。
所以在spring context 初始化的时候采用System.getenv("PIF_CONF") +System.setProperty("PIF_CONF","XXXX")将PIF_CONF设置进props。这样,log4j就可以读取到log path了。
网友评论