Java中重定向输出流实现用文件记录程序日志
作者:junjie 发布时间:2021-12-28 20:57:13
标签:Java,重定向,输出流
System中的out,error都是final类型的,不能做改动。但通过setOut()可以设置新的输出流,从而实现写日志的功能。
import java.io.PrintStream;
import java.io.FileNotFoundException;
public class RedirectOutputStream {
public static void main(String arg[]){
try{
PrintStream out = System.out; //保留原输出流
PrintStream ps = new PrintStream("./log.txt");//创建文件输出流
System.setOut(ps); //设置使用新的输出流
int age = 18;
System.out.println("年龄变量成功定义,初始值为:18");
String sex = "女";
System.out.println("性别变量成功定义,初始值为:女");
String info = "这个是"+ sex +"孩子,应该有"+age+"岁";
System.out.println("整合两个变量为info字符串变量,其结果为"+info);
System.setOut(out); //恢复原有输出流
System.out.println("程序运行完毕,请查看日志文件。");
}
catch(FileNotFoundException e){
e.printStackTrace();}
}
}
日志如下:
年龄变量成功定义,初始值为:18
性别变量成功定义,初始值为:女
整合两个变量为info字符串变量,其结果为这个是女孩子,应该有18岁
总结:
该方法中保存了System类的out成员变量为临时变量,然后创建新的文件输出流,并把这个输出流设置为System类的新是输出流。并将持续的调试信息输出到日志中去。主要方法:
1. setOut()方法: 重新分配System类的标准输出流。
2. setErr()方法: 重新分配System类的标准错误输出流。
3. setIn()方法: 重新分配System类的标准输入流。


猜你喜欢
- 有时候,根据业务逻辑的需求,我们想要获取到某个接口的所有实现类。在这里大致介绍两种方式:1.借助Spring容器实现Spring作为一个容器
- launch 是 CoroutineScope 的一个扩展函数,该方法在不阻塞当前线程的情况下启动新的协程,launch 里面的代码虽然有挂
- 1、创建Windows服务 说明:a)Description 服务描述,直接显示到Windows服务列表中的描述;b)Displa
- 1. 绪论当我们编写了自己的C#程序,有程序自定义的文件类型时,通常希望它满足以下需求:双击自定义文件打开自定义程序 自定义文件有着自己的图
- 在Word中可将文件通过OLE对象嵌入的方式插入到文档,包括Word、excel、PDF、PPT、图片、宏文件、文件包等在内的多种文件类型。
- 一. ANR场景无论是四大组件或者进程等只要发生ANR,最终都会调用AMS.appNotResponding()方法,下面从这个方法说起。以
- 1.easy-captcha工具包生成验证码的方式有许多种,这里选择的是easy-captcha工具包。github开原地址为:easy-c
- 很多初学者都对C中的指针很迷糊,希望这篇blog能帮助到大家:1.什么是“指针”:在执行C程序的时候,由于我们的数据是存储在内存中的。所以对
- 对其做了些优化,但此种sql生成方式仅适用于复杂程度不高的sql,所以实用性不是很高,仅仅是写着玩的,知道点mybatis的注解形式的使用方
- 本文实例讲述了Android string.xml中的替换方法。分享给大家供大家参考,具体如下:在android的开发中,经常会遇见一句话,
- Android创建桌面的快捷方式 概述 :创建桌面快捷方式相当与创建一个程序的入口,就像我们程序在安装完毕后会自动创建一个图标到桌面。其实创
- 这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况
- SpringBatch介绍:SpringBatch 是一个大数据量的并行处理框架。通常用于数据的离线迁移,和数据处理,⽀持事务、并发、流程、
- Eclipse的Servers视图中无法添加Tomcat6/Tomcat7的方法引言: 在基于Eclipse的开发过程中,出现了无法在Ecl
- 背景出现了一次生产事故,事情是这样的,我们有一个项目,Java访问数据库的框架使用的是MyBatis。然后一个业务员在系统中查询了一个订单,
- private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAd
- 项目要用到弹出框,还要和苹果的样式一样(Android真是没地位),所以就自己定义了一个,不是很像(主要是没图),但是也还可以。废话不多说了
- 废话不多说,直接上代码import java.text.SimpleDateFormat; import java.util.Date;/*
- 特简单, 没有数据库, 还没有处理各种异常。登录:输入用户名点击的登录即可。发送消息: 特定格式->toUser:message1.
- 小伙伴们在使用ICP提供的各种能力进行集成开发时常常会遇到一些技术上的困扰,例如ICP中很多接口是通过OCX控件的方式提供的,如何调用这些接