文章目录
前言
最近项目上需要我配置日志框架,由于之前日志框架都是大佬们配好了的,所以我对这块知识了解相对比较少,所以借这个项目机会,也顺便深入学习一波,所以整理了一篇关于Java日志系统的总结文章,方便之后的继续学习。
一、关于日志的理解
1、什么是日志
其实,说到日志,其实我们应该很熟悉,比如 Tomcat 的日志,catalina.日期.log,还有Nginx的日志等等,都是用来记录系统的日志的。那么日志到底是什么呢。我理解的日志是我们用来记录具体的事情的一种文字或者表格或者其它方式的一种描述描述信息。程序中的“日志”,记录系统执行的关键环节或者,关键的步骤,或者记录日志的错误信息或者其它的描述的信息。
2、为什么需要日志
在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。
在生产环境下,我们往往关注的是日志,注意原因是在生产环境下,需要去记录调试信息,当产品上线之后,在项目开发阶段,我们可以将日志输出到控制台上,便于我们观察维护排错;而在项目上线之后,我们就没有控制台进行观察了,但是我们需要去记录产品的状态,记录问题出现的时间,位置,而记录这些信息都需要在当前系统下搭建日志系统,所以这个时候我们可以将日志输出报错在磁盘文件中,便于我们后期的管理维护。
日志,是系统运行过程,对系统运行的关键的环节,或者关键的步骤来进行记录,我们通过日期打印的,或者记录的这些关键的信息,我们可以分析出,系统的性能,是否需要优化,系统出现故障,或者宕机,之后,我们可以通过日志分析,来找出系统所出的问题。所以日志它有助于我们提升对系统的监控或者维护。
二、日志门面
1、什么是日志门面
日志门面:是日志实现的抽象层。
日志门面框架就是一套提供了日志相关功能的接口而无具体实现的框架,其调用具体的实现框架来进行日志记录。也就是说日志门面天然的兼容日志实现框架。典型的日志门面就是Commons Logging、SLF4J 等。
2、为什么需要日志门面
我们知道,每一种日志框架都有自己单独的 API,如果直接使用对应的框架就要使用其对应的 API,当日志框架底层代码发生改变或者对当前日志框架进行更换的时候(比如当你的日志框架更换的时候,你只需要在项目里更换相对应的依赖或者jar包就好了,而不需要去修改自己项目的代码),这就大大的增加应用程序代码对于日志框架的耦合性。
为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知。只要门面服务做的足够好,随意换另外一个日志框架,应用程序不需要修改任意一行代码,就可以直接上线。
3、常见的日志门面
JCL(Commons-Logging):Apache开发的日志门面,在2014年就已经停止更新了。
SLF4J(Simple Logging Facade For Java):SLF4J 的作者就是 Log4j和Logback 的作者 Ceki Gülcü.
Jboss-Logging:使用的场景太少
三、Java日志框架
1、为什么要用日志框架
日志框架都是经过很多人使用的,所以已经是很成熟的产品了,我们只需要拿来直接使用就好了,可以大大提升我们的开发效率,而且日志框架提供了更多的功能,可以完全满足我们日常的开发使用。
2、常见的日志实现框架
日志框架 | 描述 |
---|---|
Jul | Jdk自带的日志,不需要第三方依赖,使用方便,简单 |
Log4j | 是Ceki Gülcü开发的,最早出现的日志框架 |
Log4j2 | Apache开发的产品,性能强悍,设计过于复杂,很多开源框架不支持,很容易踩坑 |
Logback | 是Ceki Gülcü开发的,Log4j的升级版 |
四、SpringBoot日志
当你运行一个SpringBoot项目的时候(你什么都没有配置的情况下),你会发现其实控制台上已经输出了日志信息(如下图所示),但是实际情况是我们明明什么都没有配置,为什么会有日志信息的输出呢?
其实我们通过看SpringBoot的依赖就可以发现(如下图所示),其实SpringBoot默认采用的日志框架是logback,通过看spring-boot-starter,其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback,并用INFO级别输出到控制台;默认情况下,SpringBoot将日志输出到控制台,不会写到日志文件中。
小结
以上就是我关于日志的总结,后面可能还有有所修改。