之前分享了一篇《Java 异常处理从入门到实战 》,当时有人提出如果能分享一篇日志处理相关的文章就更好了。这篇 Chat就是对之前参加异常处理 Chat 同学的一个回应,希望能带给大家一些收获。
日志和异常处理结合得当的话,会给项目维护带来非常大的价值。
日志:就是介绍一个过程和经历的详细记录。
项目日志:就是项目开发过程的详细记录,一般由项目经理记录。
代码里的日志:就是程序员记录某个开发过程的详细情况,这是项目里每个程序员需要做的工作。
代码里的日志在项目中扮演着非常重要的角色,日志记录的详细程度决定系统是否容易维护,Java 项目中日志记录的框架有很多,在项目中如何选型也必将困惑。
我们这场 chat 讨论的主题就是:Java代码里的日志,主要是写给 Java 程序员看的,本篇 Chat 从以下六个方面对 Java 日志进行阐述:
一、日志在项目中的作用
二、Java 日志使用的困惑
三、Java 日志演化历史
四、使用不同框架的 Java 日志示例说明
五、项目中日志记录遵守哪些原则
六、一个推荐的项目 Java 日志实例
以期通过本场 Chat 的学习,能使大家在编码过程中,对日志的处理过程加深认识、统一规范、得到收获,从零开始轻松掌握 Java 日志处理,并且可以运用到实际项目中。
一、日志在项目中的作用
Log 日志,主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等,也有利于将这些信息进行持久化(如果不将日志信息保存到文件或数据库,则信息便会丢失)。
1. 查看程序当前运行状态
如果想了解程序当前的运行情况,我们通过实时查看应用日志的输出,就能进行分析。
比如,你在浏览器里输入一个 action 地址,该 url 负责执行一些批量处理,action 运行后,假设处理比较耗时,你再浏览器里无法直接看到程序的执行结果,此时,你可以打开系统日志,通过从日志输出信息就能轻松地分析该 url 的执行情况。
2. 查看程序历史运行轨迹
如果想了解历时程序的运行情况,我们通过查看应用历时日志的输出,就能进行分析。
比如,你想了解下上周周末用户访问量,你可以打开系统上周周末的日志记录,进行分析。你想了解昨天的某个定时任务是否正常执行,你可以打开昨天的系统日志,精确查找该定时任务的输出信息,从而判断定时任务是否执行。
3. 排查系统问题
排查系统问题是程序员最熟悉的味道了,在项目维护过程中,出了任何问题,都需要程序员去进行排查。此时,如果没有清楚明了的日志记录,想要核查出问题的原因,难于上青天。
一个优秀的程序员一定是个日志记录高手,如果日志记录的好,处理得当,排查问题则易如反掌。
大家有没有遇到一种场景,一个问题发生了,有的人能迅速定位问题并解决,有的人搞了半天,还没发现问题的产生原因。
其实快速定位问题的人一定记录了详细的日志,因此当问题发生的时候,通过核查问题发生时候的日志,就能快速的找出问题产生的原因。
4. 优化系统性能
通过记录程序运行的时间,就能判断程序从执行开始到执行结束消耗的时间,从而判断系统性能是否达标,为系统性能优化提供判断依据。
5. 安全审计的基石
网络安全越来越受到大家的关注,所以系统安全目前是项目过程非常重要的一个环节,安全审计也是系统中非常重要的部分。
通过系统日志分析,可以判断一些非法攻击,非法调用,以及系统处理过程中的安全隐患。
比如,大家平时都在做运营系统,其中运营人员在通过界面处理一些数据的时候,如果没有清楚的日志操作记录,一条数据被删除或者修改,你是无法找到是谁操作的,但是如果你做了相应的记录,该数据被谁删除或者修改就会一目了然。
通过以上 5 点说明了日志在项目维护过程中的重要作用
一个系统是否容易维护,很大程度上是基于程序员在程序开发过程中的代码日志是怎么记录的。
日志记录的越清楚,维护起来就越容易,有的程序员没有日志记录意识,或者对日志记录认识不清,或者是不知道日志该如何记录,这势必会给项目后期的维护带来一个个大坑。
当项目经理让你解决一个线上问题的时候,正好遇到了一个没有日志记录习惯的人写的代码,你就能体会到那种痛苦,不由地想要爆粗口。
因此,作为一个程序员来说,掌握代码日志的记录方法,是程序员生涯的一项基本功。写代码时做好日志记录是“即利人又利己”的做法,不写日志记录就是“损人不利己”的做法。
二、Java 日志使用的困惑
大多数的程序员都能认识到日志在项目中的重要性,可是对日志记录具体要怎么做,做到什么程度,日志记录用什么工具,会有很多困惑。
1. 工具困惑
作为 Java 程序员,幸运的是,Java 拥有功能和性能都非常强大的日志库;不幸的是,这样的日志库有不止一个,相信每个人都会对JUL(Java Util Log)、JCL(Commons Logging)、Log4j、SLF4J、Logback、Log4j2 等等的日志工具,到底使用什么产生感到困扰。
下面的第三节:“Java 日志演化历史”,第四节:“使用不同框架的 Java 日志示例说明”,为大家解惑 Java 日志框架的使用问题。