您的位置:首页 > 其它

用log4j输出system.out的日志

2016-12-16 11:30 453 查看
对于一些老项目,用的都是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,增加一个监听,指向转化类的路径:

<listener>

    <listener-class>com.sinosoft.log4j.LogSystem</listener-class>

 </listener>

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

双击bin/tomcat7w.exe-——>选logging----->将redirect stdout置为空(原来为auto)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: