原文: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)
【javakotlin什么意思 JavaKotlin 实现控制台输出日志保存到文件】将输出流分为两份输出,一份对应原来的控制台输出,一份对应文件流的输出
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 printlnSystem.setOut(ps)当然,上面只是设置了平常的输出流,我们还要设置一下错误输出流(文件输出流保持一个,控制台的输出日志和错误日志都保存在同一个文件中)val fos = FileOutputStream("xx.log") val myOut = TeeOutputStream(System.err, fos)val ps = PrintStream(myOut, true) System.setErr(ps)参考- Java:Java控制台输出保存进文件 - 怒吼的萝卜 - 博客园
文章插图
或者加入QQ群一起学习

文章插图
TornadoFx学习交流群:1071184701

文章插图

文章插图
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
