Java/Kotlin 实现控制台输出日志保存到文件
2022-02-21 15:23
501 查看
原文:Java/Kotlin 实现控制台输出日志保存到文件 | Stars-One的杂货小窝
之前开发的几款软件,用户用着的过程中,偶尔会存在报错问题,想保留一份日志出来,之后可由用户发过来,进行问题的排查
由于之前都是使用的
System.out.println()进行输出,自己又是懒人一个,不想一个个地方的去改,于是就有了下面的研究
本文较短,主要是总结一下
涉及知识:
- IO流
- Kotlin
方法
网上搜集的方法无非两种,一种是使用日志框架,第二种则是将控制台默认的输出流量设置为我们自定义的文件输出流
1.使用日志框架
比如说logback,可以通过xml配置进行输出日志的过滤,及将日志保存在文件中
但这种方法经过实际测试,无法直接把我个人写的那些输出语句保存在文件中,但之前在某Java交流群中,某位大佬却说是可以
尝试一番,发现确实是无用,必须要使用框架提供的logger对象来输出对应的日志,日志文件才可以捕获到输出的日志
与我期望的不符合,此方案抛弃
2.设置系统输出流
第二种则是把控制台输出流设置成我们自定义的文件输出流
//FileOutputStream输出流的使用方法这里不再赘述了 val fileOs = FileOutputStream("xx.log") val printStream = PrintStream(fileOs) System.setOut(printStream)
上面的这个可以实现结果,但是这样设置了,控制台就不会有输出了。。
于是怎么办呢?看到大神的说的,可以采用数据流的分发流(TeeOutputStream)
将输出流分为两份输出,一份对应原来的控制台输出,一份对应文件流的输出
TeeTeeOutputStream此类是属于
common-io库中的类,使用前需要引入
common-io的库
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
val fos = FileOutputStream("xx.log") val myOut = TeeOutputStream(System.out, fos) val ps = PrintStream(myOut, true) //true - auto-flush after println System.setOut(ps)
当然,上面只是设置了平常的输出流,我们还要设置一下错误输出流**(文件输出流保持一个,控制台的输出日志和错误日志都保存在同一个文件中)**
val fos = FileOutputStream("xx.log") val myOut = TeeOutputStream(System.err, fos) val ps = PrintStream(myOut, true) System.setErr(ps)
参考
相关文章推荐
- Java 如何获取控制台日志输出的信息? WriterAppender 可以实现? 配置文件如何配置
- 自定义配置python logger模块实现日志输出到文件和控制台
- 如何将tomcat控制台输出的内容直播用日志文件保存起来
- 如何将tomcat控制台输出的内容直播用日志文件保存起来
- 两步实现Log4j记录java控制台输出的系统所有异常信息和自定义记录日志---->非常实用,强烈推荐阅读
- Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)
- LOG4J的配置..实现了输出到控制台、文件、回滚文件、发送日志邮件
- Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法
- springboot使用logback按等级输出到控制台和保存到不同日志文件
- LOG4J的配置..实现了输出到控制台、文件、回滚文件、发送日志邮件
- JAVA实现将控制台输入的字符串保存到文件中
- 命令行运行java程序,将控制台日志保存到指定文件
- logback 参考官方文档 实现控制台与文件输出日志的 最基本配置
- JAVA项目中,配置LOG4j,将日志按照不同级别输出到控制台和文件中
- Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)...
- 用java实现print screen,读取位图文件,将位图文件转化位jpeg格式并保存成文件输出!
- Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)
- JAVA中自定义日志输出格式及自定义文件处理器的实现
- 调用DOS实现窗口隐藏并且把DOS控制台下输出信息写入文件中保存 笔记.
- Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)