og4j配置日志文件相对路径写法方法

在使用log4j日志类配置日志文件时,都会配置日志文件的输出路径,现在分几种情况进行日志文件输出路径讲解:
log4j.properties文件配置如下:
log4j.rootLogger=DEBUG,A1,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=debug
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss.SSS} %l %m%n
# Appender A2 writes to the file "test" in user's home.
log4j.appender.A2.Threshold=info
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=${relativePath}/logs/log.log
# Truncate 'test' if it aleady exists.
log4j.appender.A2.Append=true
log4j.appender.A2.MaxFileSize=5MB
log4j.appender.A2.MaxBackupIndex=5
# Appender A2 uses the PatternLayout.
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss.SSS} %l %m%n

log4j.appender.A2.File路径根据不同的环境如何正确配置呢。
第一种情形:非web工程
1、写绝对路径
log4j.appender.A2.File=c:\\xx.log

2、写相对路径
①在程序中直接运行的,使用${xx},替换,xx需要根据实际情况进行填写
 
log4j.appender.A2.File=${xxx}\log.log

②可运行jar包,日志需要跟jar包同级目录。这种情况需要根据运行的jar包动态修改路径,这里提供一种方式:

 	
                Properties props = new Properties();
 		InputStream istream = null;
String path =  URLDecoder.decode(XXX.class.getProtectionDomain()
			        .getCodeSource().getLocation().getPath(), "UTF-8");
             istream = XXX.class.getClassLoader().getResourceAsStream("log4j.properties");
             props.load(istream);
             props.setProperty("relativePath",path);
             PropertyConfigurator.configure(props);//装入log4j配置信息


第二种情形:Web工程
1、使用服务器环境变量
log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home}
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=${catalina.home}/xx.log
log4j.appender.A2.MaxFileSize=10KB
其中的${catalina.home}并非windows系统的环境变量,这个环境变量不需要在Windows系统的环境变量中设置。之所以可以这么配置,是因为在tomcat\bin\catalina.bat(startup,shutdown都是调用这个)里面自带有 -Dcatalina.home= "%CATALINA_HOME%" 。继承这个思想,所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中
2、结合spring配置
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root.xxx</param-value>
</context-param>
log4j.properties中的
  log4j.appender.A2.File=${webapp.root.xxx}/logs/log.log

猜你喜欢

转载自xu-nuo.iteye.com/blog/2386490