日志
日志的概念
处理历史数据、诊断问题理解系统的重要作用。
日志的作用
-
调试:在开发过程中进行代码调试。
-
错误定位:项目在运行一段时间后,网络原因,数据问题,内存问题出现异常。这时日志可以帮助我们快速定位错误位置。
-
数据分析
接触过的日志
最简单的日志输出,我们每天都在用
System.out.println("日志输出");
错误的日志:
System.err.println("错误...");
主流的日志框架
-
日志实现(具体干活的):JUL(java.util.logging)、logback(最火)、log4j、log4j2
-
日志门面(指定规则的):JCL、slf4j。
ECMAScript:简称ES,规范的指定者
JavaScript:简称JS,规范的实现者
JUL
JUL全程java.util.logging
是Java原生的日志框架,使用时候不需要引入任何第三方依赖,相对于其他日志框架来说使用方便,在小型的应用中。
在JUL中有以下组件:
-
Loggers:记录器
-
Appenders:决定了日志记录的位置可以是控制台、文件、网络上的url地址
-
Layouts:对日志信息进行格式化
-
Level:日志的等级
-
Filters:过滤器,我们可以根据需要定制哪些信息需要记录,哪些不需要记录
日志的级别
在java.util.logging.Level
中定义了日志的级别:
-
SEVERE(最高值)
-
WARNING
-
INFO(默认级别)
-
CONFIG
-
FINE
-
FINER
-
FINEST(最低值)
还有两个特殊的级别:
-
OFF:可用来关闭日志记录
-
ALL:启用所有消息的日志记录
LOG4J
Log4j是apache下的一款开源的日志框架。这是一款比较经典日志框架,目前依然有一些老旧的项目在使用Log4j,Log4j2并不是Log4j的升级版,对Log4j的改动特别大。
log4j定义的日志级别:从高到低
-
fatal:严重的错误,会影响程序的执行,会导致程序的退出
-
error:虽然发生错误事件,但是不影响系统的继续运行
-
warn:会出现潜在的可能影响程序运行的错误
-
info:一般会监控程序运行的全过程
-
debug:用来监控调试信息
-
trace:用来追踪全过程,方法,参数,变量...
和JUL一样,有两个特殊的级别:OFF
,用来关闭日志记录。ALL
,记录所有消息日志。
一般情况下,我们只使用4个级别,error>warn>info>debug。
日志门面
日志门面:规范。
日志门面相当于菜单,日志实现就相当于厨师。
常见的日志门面:JCL,SLF4J
常见的日志实现:JUL,LOG4J,logback,LOG4J2
SLF4J
目前是市面上最流行的日志门面。现在的项目中,基本上都是使用的SLF4J作为日志系统。
SLF4J主要提供了两大功能:
-
日志框架的绑定
-
日志框架的桥接
logback
如果要使用外部配置,需要在classpath下引入配置文件。
-
默认会先找logback-test.xml
-
如果没有logback-test,会去找logback.groovy
-
如果没有logback.groovy,会去找logback.xml
log4j2
参考logback的一些优秀的设计。
带来了一些重大的提升:
-
异常处理,在logback中,Appender的异常不会被应用感知的,在Logj2中,提供了一些异常处理机制
-
性能提升
-
自动重载配置
如果要使用外部配置:
-
xml
-
properties
-
yml
-
json
默认会加载classpath下的log4j2.xml
。