标准输出流与日志文件

一、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文件看一下

标准输出流与日志文件

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

二、打印日志文件

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

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:用户尝试登录,登录成功

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

Original: https://www.cnblogs.com/lingstar/p/16512626.html
Author: 星余明
Title: 标准输出流与日志文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594106/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • springcloud

    转载于狂神老师 ,本文仅作为笔记使用 回顾之前的知识~●JavaSE ●数据库●前端●Servlet ●Http ●Mybatis ●Spring ●SpringMVC ●Spri…

    Java 2023年6月9日
    058
  • 利用Github Action实现Tornadofx/JavaFx打包

    原文地址: 利用Github Action实现Tornadofx/JavaFx打包 – Stars-One的杂货小窝 最近开了个新项目stars-one/xtool: …

    Java 2023年6月14日
    092
  • MyBatis架构分析

    我们都知道 Mybatis是一个非常小巧灵活的ORM框架,深受国内广大开发者的喜爱,我们知道它的出现某种程度是为了消除所有的JDBC代码和参数的手工设置以及结果集的封装问题;基于这…

    Java 2023年6月5日
    073
  • 「Elasticsearch」ES重建索引怎么才能做到数据无缝迁移呢?

    背景 众所周知,Elasticsearch是⼀个实时的分布式搜索引擎,为⽤户提供搜索服务。当我们决定存储某种数据,在创建索引的时候就需要将数据结构,即Mapping确定下来,于此同…

    Java 2023年6月13日
    070
  • SpringCloud中集成Sleuth实现链路追踪

    场景 SpringCloud分布式微服务项目搭建构造父子模块依赖与实现服务提供者与消费者示例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/…

    Java 2023年5月30日
    080
  • elasticsearch7.6.1版本+jsoup爬取京东商品数据并使用

    实战: elasticsearch7.6.1版本+jsoup爬取京东商品数据并使用 前言 本文的实战需求是:从京东网页上拉去对应【关键字】的数据且存放到elasticsearch(…

    Java 2023年6月5日
    082
  • [置顶][水贴]给所有制作同人/独立游戏的同学一些建议

    趁最近搞游戏引擎系列之时给所有制作同人/独立游戏的同学一些建议 当然我想来这个BLog 80%-90% 的人都不是制作同人/独立游戏的同学。 所以说水贴一个。。。 时间: 我记得当…

    Java 2023年5月29日
    075
  • HTML相关知识入门

    HTML 注意点 html是不区分大小写的 建议包括嵌套,不要交叉嵌套 文件后缀名可以是 .html或 .htm 格式 标题 标签 <h1></h1>标题 …

    Java 2023年6月6日
    060
  • php在大并发下redis锁实现

    在现如今电商盛行的时期,会出现很多促销活动,最为常见的就是秒杀。在秒杀系统中最为常见的问题就是会出现超卖的情况,那么如何来杜绝超卖的情形了,在业务逻辑层面可以使用缓存以及加锁的手法…

    Java 2023年6月8日
    082
  • Java中定义常量方法及建议(Class/Interface)

    采用”类.常量名”方法进行调用。需要私有化构造方法,避免创建该类的实例。同时不需让其他类继承该类。 如果多处需要访问工具类中定义的常量,可以通过静态导入(s…

    Java 2023年5月29日
    068
  • spring boot 启动慢的原因

    停留在Spring logo那里差不多4分钟 SpringBoot启动慢的原因应该是某些应用占用了spring config server默认的端口8888,然后SpringClo…

    Java 2023年5月30日
    070
  • springboot 整合druid–Java 注解+代码配置 Bean

    1.pom.xml引入 2.druid配置类: 3.构建DataSource对象 4.配置监控拦截器 5.配置Druid监控视图 6.去除druid监控页面广告 7.启动类加@Se…

    Java 2023年6月6日
    098
  • 日志的搭建

    @ 前言 一、依赖 二、日志文件 三、代码编写 四、日志输出 提示:本文仅供学习交流,请勿用于非法活动! 前言 本文内容: 日志搭建 一、依赖 ch.qos.logback log…

    Java 2023年6月13日
    069
  • Spring知识点总结5 反射与代理

    反射机制允许程序在执行期借助API取得任何类的内部信息,并能直接操作任意对象的内部属性方法 反射 java反射机制提供的功能 在运行期间判断任意一个对象所属的类 在运行期间构造任意…

    Java 2023年6月6日
    067
  • rocketmq总结

    1:角色关系 2:顺序消息 消费消息的顺序要同収送消息的顺序一致,在 RocketMQ 中,主要挃的是局部顺序,即一类消息为满足顺序性,必须 Producer 单线程顺序収送,丏収…

    Java 2023年5月30日
    080
  • centos7-Logstash的使用

    1.下载 Logstash官方下载 2.安装 2.1 yum安装 logstash.repo [logstash-7.x] name=Elastic repository for …

    Java 2023年6月7日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球