日志用于记录程序运行时的信息,以便程序出现问题时,可以根据日志信息来查找问题
日志该记录什么?
1.操作
2.执行时间
3.数据
4.结果
但是程序发生问题的概率不高,大部分场景下是垃圾数据,但是当程序出现问题时,日志就是宝贵的数据,我们不知道他什么时候出问题,我们也不可能只记录异常的堆栈,有时候要知道前后的数据才能分析出问题,这种时候我们到底该怎么记录数据呢,这个时候我们就要考虑到日志的级别。
日志的级别:
日志的级别指的是日志输出的详细程度,日志的级别越高,详细程度就越低
目前通用的日志级别的一种(log4j):
0.all:打开所有日志
1.trace:最详细的日志级别,一般不会使用(给程序员看的)
2.debug:用于调试程序,记录程序中的上下午数据(给程序员,运维看的)
3.info:用于记录程序的运行信息,比如程序启动,关闭(客户看的)
4.warn:用于记录警告信息,比如程序出现了潜在的错误,但是程序还是正常运行的
5.error:用于记录程序的错误信息,比如程序出现了错误,但是程序还是正常运行的
6.off:关闭日志
日志的输出方式:
输出到控制台,文件,数据库,日志分析系统(ELK)
控制台是有缓存大小的,windows10系统的控制台一般默认缓冲区的大小是50,意味着只会保留50行数据,超过50条的数据会被丢弃,只会保留最新的50条数据。一版来说日志并不会只有50行,这样就不能输出到控制台。所以我们就输出到文件。数据库,日志分析系统等等。
输出到控制台一般是给开发人员看的
日志的框架:
目前来说Java用的最多的四种日志框架log4j,log4j2,logback,JDK Logger,
前三个是一个作者,后一个是java内置的,目前市面上占比最多的是logback,以及log4j,一般是这两个,作者首先开发的是log4j,作者可能想迭代版本开发了log4j2,后面他发现一些问题就重写了这个框架,取了个名字叫logback,我们后面所要学的比如springboot,内置的日志框架就是logback
日志的框架兼容问题:
平时我们开发的时候,经常要引入别人的包
比如做一个项目我们需要同时引用以下A,B,C,D四个包
A包用的日志框架是log4j
B包用的日志框架是log4j2
C包用的日志框架是logback
D包用的日志框架是JDK Logger
现在我们的project同时引入了ABCD,怎么办?每一种框架都有自己独特的配置文件,为了记录一个日志文件,导入四个框架的配置文件,还不考虑这四个框架本身会有jar包冲突,这样肯定不行,这个时候我们就需要一个东西来忽略这四个配置,这个东西就是日志门面。
日志门面:
slf4j,commons-logging
常用的是这两个,他们有什么作用呢,如果不用日志门面,日志会直接依赖我们的项目,这就要我们为每一个包加一种配置,日志门面就是解决这个问题的,他屏蔽掉每一种日志的使用方式,提供统一的API,由日志门面调用每一种框架,我们的程序就负责调用日志门面。由门面来调用后面的框架,这样我们就不用关心包用的是什么日志框架,反正日志门面全给我们处理了。
作用:为了屏蔽日志框架的差异,统一日志的输出方式和调用API
日常开发中,我们用的最多的还是日志门面,但是日志框架还是要了解一种,我们就学log4j,因为后面两个是由log4j演变过来的
log4j导包
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17<version>
</dependency>
</dependencies>
log4j以类为单位进行输出
public class Test {
public static void main(String[] args) {
// 1. 通过类名获取日志对象
Logger logger = Logger.getLogger(Test.class);
// 2. 日志记录输出
logger.log(Level.DEBUG, "这是debug日志...");
//缺少配置文件,会输出三个警告
}
}
配置文件怎么配,请以我粉丝的身份私信我,然后自己看log4j的帮助文档(●'◡'●)