用log4j输出system.out的日志

对于一些老项目,用的都是system.out输出日志,并且用的都是tomcat自带的logging.properties配置文件,但是这样有一个弊端,对于最关键的错误日志和输出日志tomcat记录日志的方式为每次启动服务才会检查是否生成新的文件,这样就会导致stdout.log和stderr.log只有一个,随着时间越来越大,毕竟生产服务器不会每天启动停止。这样我们就需要用log4j去把system.out的日志记录下来,具体步骤如下:

1,引入log4j的jar包,这个就不需要说了,直接附配置文件:

log4j.rootLogger=INFO,Stdout,R
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n


log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/pboc.log
log4j.appender.R.datePattern='.'yyyy-MM-dd'.txt'
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n


2,增加转化类,放置位置随便:

public class LogSystem implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent event) {
    }
    private void log(Object info) {
        LogFactoryImpl.getLog(getClass()).info(info);
    }
    public void contextInitialized(ServletContextEvent event) {
        PrintStream printStream = new PrintStream(System.out) {
            public void println(boolean x) {
                log(Boolean.valueOf(x));
            }
            public void println(char x) {
                log(Character.valueOf(x));
            }
            public void println(char[] x) {
                log(x == null ? null : new String(x));
            }
            public void println(double x) {
                log(Double.valueOf(x));
            }
            public void println(float x) {
                log(Float.valueOf(x));
            }
            public void println(int x) {
                log(Integer.valueOf(x));
            }
            public void println(long x) {
                log(x);
            }
            public void println(Object x) {
                log(x);
            }
            public void println(String x) {
                log(x);
            }
        };
        System.setOut(printStream);
        System.setErr(printStream);
    }

}

3,修改web.xml,增加一个监听,指向转化类的路径:


    com.sinosoft.log4j.LogSystem
 

4,这样就配置完毕,但是还需要把tomcat自带的stdout.log关掉(本地需要用服务启动才会有这个日志生成):

双击bin/tomcat7w.exe-——>选logging----->将redirect stdout置为空(原来为auto)



你可能感兴趣的:(用log4j输出system.out的日志)