原文: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/Kotlin 实现控制台输出日志保存到文件的更多相关文章

  1. 【代码笔记】iOS-将log日志保存到文件

    代码: #import "AppDelegate.h" #import "RootViewController.h" @implementation AppDe ...

  2. iOS - NSLog、UncaughtException日志保存到文件

    转:http://blog.csdn.net/marujunyy/article/details/12005767 对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment ...

  3. C# log4net 配置及使用详解--日志保存到文件和Access(转)

    按语: 最近项目要求选用Access数据库,但日志管理采用log4net,但保存到数据库一直没有成功,后按照如下配置在程序退出时可以成功保存. 开始新建文件应用log4net.dll  ,重新编译就报 ...

  4. logstash自己的日志保存到文件中:log4j2.properties

    status = error dest = err name = PropertiesConfig property.filename = /gwlog/data/logstash/logs appe ...

  5. Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出

    1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...

  6. Java基础知识强化之集合框架笔记36:List练习之键盘录入多个数据在控制台输出最大值

    1. 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值 分析: •  创建键盘录入数据对象 •  键盘录入多个数据,我们不知道多少个,所以用集合存储 •  以0结束,这个简单,只要键盘 ...

  7. python将控制台输出保存到文件

    python将控制台输出保存到文件   在平时工作中,有时我们需要将控制台输出保存到文件 1.命令行用>覆盖写入和>>追加写入 for i in range(10000): prin ...

  8. java项目中eclipse控制台输出log4j的信息

    最近做的一个hadoop项目中,用MR实现了一个比较复杂的问题,其中的日志信息都是使用的是log4j来处理的.但不知怎么控制台不输出日志信息,只能输出System.out.println()信息,这个 ...

  9. Java代码工具箱之控制台输出重定向_控制台输出到文件

    1. 情形:有时候控制台输出太多,在MyEclipse显示不全. 2. 说明:本代码只会重定向 system.out 的内容, error及其它不受代码影响.其它应该类似. //自定导入必要库 //然 ...

  10. Java如何利用for循环在控制台输出正方形对角线图形

    1 /* 2 利用循环在控制台输出如下正方形对角线图形 3 * * * * * * * * * * * 4 * * * * 5 * * * * 6 * * * * 7 * * * * 8 * * * ...

随机推荐

  1. 手把手教你-把Kali Linux系统安装到U盘 【超详细】(随身携带/即插即用)

    [0-背景说明]: 1)为什么想要把Kali Linux系统安装到U盘? 之前学习渗透测试的时候,有安装过虚拟机,在虚拟机上安装Kali Linux系统,但是因为是在现有系统上安装虚拟机又安装kali ...

  2. 离线解锁 CodeCombat 全关卡教程 使用docker安装实现

    前期准备 下载安装docker desktop https://www.123pan.com/s/fmvUVv-HqApH, 这个安装不会的随便搜一个教程,挺多的.我随便找了一个知乎的 Windows ...

  3. 自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人

    如今,大模型层出不穷,这为自然语言处理.计算机视觉.语音识别和其他领域的人工智能任务带来了重大的突破和进展.大模型通常指那些参数量庞大.层数深.拥有巨大的计算能力和数据训练集的模型. 但不能不承认的是 ...

  4. ASP.NET Core 6.0+Vue.js 3 实战开发(视频)

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章或视频能成为你成长路上的垫脚石. 录制视频的体验 这是一个收费的视频,很抱歉,让您失望了. 我尝试做点收费的视频,不是因为我不 ...

  5. pandas教程01: pandas的安装和基本操作

      pandas是Python中常用的数据处理库,主要用来处理表格数据,类似于下面这种: 好好干文化有限公司员工薪资表 姓名 年龄 性别 年薪 奖金 久九刘 35 男 182600 42000 傅儿待 ...

  6. 教你用JavaScript实现进度条

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个进度条.进度条数字自动增加,条状图片动画演示进度完成度.通过实战我们将学会函数fun ...

  7. phpwind论坛,后台老是有缓存 不及时更新,操作无效等问题的解决方法。

  8. JS Leetcode 503. 下一个更大元素 II 题解分析,依旧单调栈做法解决此题

    壹 ❀ 引 我在JS Leetcode 496. 下一个更大元素 I 更清晰的图解单调栈做法一文中,介绍了单调栈做法解决下一个更大元素的问题,比较巧的是这道题还有升级版,题目来自Leetcode503 ...

  9. NC15557 连续区间的最大公约数

    题目链接 题目 题目描述 给一个数列共n(n<=100,000)个数,a1,a2,...,an.(0<=ai<=1000,000,000).有q(q<=100,000)个询问. ...

  10. NC14545 经商

    题目链接 题目 题目描述 小d是一个搞房地产的土豪.每个人经商都有每个人经商的手段,当然人际关系是需要放在首位的. 小d每一个月都需要列出来一个人际关系表,表示他们搞房地产的人的一个人际关系网,但是他 ...