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