自己设置目录,也就是在项目启动时通过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文件,依次类推。


所以一定要注意,在测试的时候需要修改系统时间才能看到生成的日志。