自己设置目录,也就是在项目启动时通过System.setProperty来设置,实现ServletContextListener来解决:
public class log4jlistener implements ServletContextListener {
public static final String log4jdirkey = "log4jdir";
public void contextDestroyed(ServletContextEvent servletcontextevent) {
System.getProperties().remove(log4jdirkey);
}
public void contextInitialized(ServletContextEvent servletcontextevent) {
String log4jdir = servletcontextevent.getServletContext().getRealPath("/");
//System.out.println("log4jdir:"+log4jdir);
System.setProperty(log4jdirkey, log4jdir);
}
}
web.xml配置:
<listener>
<listener-class>com.haier.framework.util.log4jlistener</listener-class>
</listener>
log4j.prtperties 配置:
# Set root logger level to WARN and append to stdout
log4j.rootLogger=INFO,console,file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout\t
# Pattern to output the caller‘s file name and line number.
#log4j.appender.console.layout.ConversionPattern=[%p]%l--- %m%n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
#以日期命名每天的LOG文件名,
log4j.appender.file.File=${log4jdir}/logs/log.log
log4j.appender.file.DatePattern =yyyyMMdd‘.log‘
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p] %L-%d{yyyy-MM-dd HH:mm:ss,SSS} method:%l - %m%n
在测试的时候怎么也出不来想要的类似“log.log20140518.log”这样的日志文件,只有一个"log.log"的文件,7日(今天)生成的日志是以 “log.log”的形式存储的,当到8日(明天)的时候是把7日生成的log.log文件保存到log.log201400707.log,然后在创建一个8日的log.log文件,依次类推。
所以一定要注意,在测试的时候需要修改系统时间才能看到生成的日志。
log4j的日志文件保存到项目发布目录,log4j文件每天分割按日期命名