把System.out.print的输出加到logback的日志文件中

经常会碰到一些旧系统,使用System.out直接在控制台输出日志,然后再用命令行重定向的方法把日志写到文件中,这个方法主要问题是日志会越来越大,要经常手动删除。

今天我们就把System.out的输出加到logback的日志文件中,由logback来管理这些日志。

直接上代码,一都在代码和注释中了。

package com.example;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.PrintStream;


public class MyLog {

    private static final Logger logger = LoggerFactory.getLogger(MyLog.class);



    /**
     * 把System.out和System.err替换为新的PrintStream,用logger.info代替System.out.print和System.err.print
     * @param SysPrintStream  可以是System.out和System.err
     * @return  返回新的PrintStream
     */
    public static PrintStream createMyPrintStream(final PrintStream SysPrintStream) {
        PrintStream myStream= new PrintStream(SysPrintStream) {
            public void print(final String string) {
                logger.info(string);
            }
        };
        return myStream;
    }

    /**
     * 在程序启动时运行这个函数,让logback接管Sytem.out和System.err
     */
    public static void init() {
        System.setOut(createMyPrintStream(System.out)); //替换System.out
        System.setErr(createMyPrintStream(System.err)); //替换System.err
    }
}

package com.example;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;



@SpringBootApplication
public class MyApplication {


    private static Logger logger = LoggerFactory.getLogger(MyApplication.class);

    public static void main(String[] args) {

        MyLog.init();//程序启动时运行这个方法,主要就是这一句
        SpringApplication.run(MyApplication.class,args);
        //下面这些代码都是测试用的
        System.out.println("===============mytest===============");
        Integer i=100;
        System.err.println(i);
        try{
            Integer t=100/0;
        }catch (Exception e){
            e.printStackTrace();
        }

    }

}

程序运行之后,我们可以看看控制台的输出:

 再看看log文件的内容:

和控制台输出的一模一样 

项目源码放在Github: https://github.com/Dengxd/LogbackSystemOut 

参考文档:java - log4j redirect stdout to DailyRollingFileAppender - Stack Overflow

猜你喜欢

转载自blog.csdn.net/dengxiaodai/article/details/129768843