最近需要改一个老项目,项目代码非常的多,完全称得上是“大而全”。

老项目里面的代码,经过几代人的编写,非常难以读懂,而且出处是 System.out.println(),今天我抽个时间给大家说一说,为什么大多数人都被告知不要在 Java 应用中使用 System.out.println!

1、第一个原因就是它不能实现日志按等级输出。具体来说就是不能和日志框架一样,有 debug,info,error 等级别的控制。

2、它的输出,你不太容易从日志当中快速的跟踪到代码。包括它无法输出具体的类名,方法名,具体代码行数等。

3、第三个原因就是,它的性能太差。

你通过这个 synchronized 关键字,你就会发现,如果项目中大量的使用了 System.out.println,最终会导致整个代码调用成了“串行”输出。

有时候不是你的 JVM 没优化好,二是你写的代码就像再打草稿!

感兴趣的网友,可以针对 System.out.println 做一个压力测试,看看它的性能报告。

System.out.println 性能并不好。当我们深入分析时,其调用顺序如下 println - > print - > write()+ newLine()。所以,一些公司在 OpenJDK 的基础上就完全的把它禁用掉,或者换成其他的实现。

System.out.println VS 日志记录组件

这里以 Log4J 为例,Log4J 具有多种记录级别。如果我们正在编写一个小程序,只是为了实验/学习目的那么使用 System.out.println 就很不错。但当我们开发生产质量软件时,我们应该注意到应该使用记录组件(log4j等),并且应该避免使用 System.out.println。为什么?

  • 灵活性:log4j的记录器提供了多种记录级别。我们可以相应地分隔日志信息。例如,X消息只能在PRODUCTION上打印,Y消息应打印在ERROR等上。

  • 可重构性:log4j只需一个参数更改即可关闭所有日志记录。

  • 可维护性:想象一下,如果我们有数百个System.out.println全部通过应用程序散落,那么在一段时间内将难以维护程序。

  • 粒度:在应用程序中,每个类都可以有不同的记录器并相应地进行控制。

  • 实用性:在 System.out 中限制重定向消息的选项,但是如果是记录器(like log4j),则可以提供多种选项。我们甚至可以创建自定义输出选项并将其重定向。

所以我们不应该使用 System.out.println 进行日志记录和调试(logging and debugging)。

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Visual Studio Code 编辑器下载及安装
  2. error C2059: 语法错误:“类型”
  3. TaskBuilder如何实现低代码开发?
  4. 一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了
  5. 你凭什么说Spring会导致MyBatis的一级缓存失效
  6. 产品研发做到又快又好的一个核心原则
  7. 2021-03-17:手写代码:单链表插入排序。
  8. 2021年全新永久有效Phpstorm激活码
  9. 史上首例!阿里程序员写的这三行代码,被国家博物馆收藏了

随机推荐

  1. android button 上添加图片
  2. [置顶] Android高手进阶教程(四)之----An
  3. android 自动化(1)
  4. 解决java.lang.RuntimeException: Unable
  5. Fiddler跟踪监控android数据包
  6. android 新增一個廣播偵聽USB設備的插拔
  7. Android中Toast的用法简介(转)
  8. Android M 指纹框架
  9. Android编译系统入门(二)
  10. android shape用法(xml文件)