标准输出流与日志文件

一、PrintStream

  • 标准的字节输出流,默认输出到控制台

1.构造方法

  • PrintStream(File file) 使用指定的文件创建一个新的打印流,而不需要自动换行。
    PrintStream(File file, String csn) 使用指定的文件和字符集创建新的打印流,而不需要自动换行。
    PrintStream(OutputStream out) 创建一个新的打印流。
    PrintStream(OutputStream out, boolean autoFlush) 创建一个新的打印流。
    PrintStream(OutputStream out, boolean autoFlush, String encoding) 创建一个新的打印流。
    PrintStream(String fileName) 使用指定的文件名创建新的打印流,无需自动换行。
    PrintStream(String fileName, String csn) 创建一个新的打印流,不需要自动换行,具有指定的文件名和字符集。

2.代码示例

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintStreamTest01 {
    public static void main(String[] args) throws Exception {
        //合起来写的输出
        System.out.println("Hello,World");
        //分开写的输出
        PrintStream ps = System.out;
        ps.println("Hello,World");
        ps.println(true);
        //标准输出流不需要手动close()关闭
        PrintStream printStream = new PrintStream(new FileOutputStream("log"));
        //我们可以使用System.setOut指定输出方向
        System.setOut(printStream);
        //再次进行输出,可以看到,输出的内容不在控制台,而是出现在了log文件中
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        //同样我们也可以在把输出方向切换到控制台上
        System.setOut(ps);
        System.out.println(4);
    }
}

输出:

首先看一下控制台的输出结果

Hello,World
true
4

然后因为我们把输出的一部分打印到log文件上了,我们打开log文件看一下

image-20220723175307745

日志文件就是利用这种原理生成的。

二、打印日志文件

首先我们一个写一个记录日志的方法

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
//日志工具
public class Logger {
    //记录日志的方法
    public static void log(String msg) {
        try {
        //标准输出流指向日志文件,用true设置成追加,再次运行就不会清空文件
            PrintStream out = new PrintStream(new FileOutputStream("data",true));

            //改变输出方向
            System.setOut(out);
            //看一下当前时间
            Date nowTime = new Date();
            //格式化一下时间
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
            //把格式化的时间传入到一个字符串
            String strTime=sdf.format(nowTime);
            System.out.println(strTime+":"+msg);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

然后我们在测试类中看一下

public class LogTest {
    public static void main(String[] args) {
        //测试工具类
        Logger.log("调用了System类的gc方法,建议启动垃圾回收");
        Logger.log("用户尝试进行登录,登录失败");
        Logger.log("用户尝试登录,登录成功");
    }
}

看一下生成的data文件

2022-07-23 16:59:53 676:用户尝试进行登录,登录失败
2022-07-23 17:00:55 511:调用了System类的gc方法,建议启动垃圾回收
2022-07-23 17:00:55 537:用户尝试进行登录,登录失败
2022-07-23 17:58:02 427:调用了System类的gc方法,建议启动垃圾回收
2022-07-23 17:58:02 455:用户尝试进行登录,登录失败
2022-07-23 17:58:02 456:用户尝试登录,登录成功

可以看到输出了日期时间以及日志信息

posted @ 2022-07-23 18:02  星余明  阅读(143)  评论(0编辑  收藏  举报