目录

日志概述

日志用途

日志使用

日志框架

门面模式

日志格式说明

日志级别

日志配置

配置日志级别

日志持久化

日志文件分割

配置日志格式

简单的日志输出

完!


日志概述

在 Java SE 语法学习阶段,我们就使用 System.out.print 来打印日志,测试一些我们的语法结果。在之后的学习,也通过日志,断点的方式,来对程序进行调试,定位问题 bug。

随着我们项目的复杂度越来越高,普通的打印日志的方式无法满足我们的要求,需要专门更加的日志框架。

日志用途

        1. 系统监控。

通过日志来记录某个系统的运行状态,响应时间,响应状态等等...设置不同规则,超过阈值报警等..

        2. 数据采集

数据统计,统计页面点击量,浏览量...

推荐排序,根据用户浏览数据,来个性化的训练模型,为用户推荐内容。

        3. 日志审计

日志使用

SpringBoot 内置了日志框架 Slf4j。我们可以直接在程序中调用 Slf4j 来输入日志。

打印日志:

        1. 在程序中得到日志对象

        2. 使用日志对象输出要打印的对象

1. 在程序中得到日志对象:注意,Logger 类型是属于 org.slf4j 包下的,不要导错包

LoggerFactory.getLogger()中的参数,一般标识为类对象,当需要进行日志定位时,可直接定位到对应类中。

2. 使用日志对象输出要打印的对象

日志框架

slf4j 并不是一个真正的日志实现,它只是一个对象,是日志框架指定的规范的一个抽象层,无法独立使用,需要和具体的日志框架配合使用~

门面模式

SLF4J 是门面模式的典型应用

门面模式,又称外观模式,提供了一个统一的接口,来访问子系统中的一群接口。主要特征是定义一个高层的接口,来统一管理使用子系统。

举个栗子:小爱同学,打开灯,拉上窗帘,热说器水温加热到 38°~

引入 SLF4J 日志门面

SLF4J 可使得我们的代码独立任意一个特定的日志 API,方便统一管理~

日志格式说明

1. 时间日期

2. 日志级别:ERROR,WARN,INFO,DEBUG,TRACE

3. 进程 ID

4. 项目名

5. 线程名

6. Logger 名,通常使用源代码的类名

7. 日志内容

日志级别

日志级别从高到低分为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE

FATAL:致命信息,需要立即解决

ERROR:错误信息,长期不及时处理,会导致程序崩溃。

WARN:警告信息,不影响使用,但需要注意

INFO:普通信息,记录程序正常运行的信息

DUBUG,TRACE:调试追踪信息,DEBUG 在调试时候打印关键信息,一般不使用~

日志级别是开发人员在进行开发时,对可能出现的问题进行的自行评估,是开发人员根据自己的理解来进行的评判~

SpringBoot 默认的日志框架是 Logback,没有 FATAL 级别。

当出现 FATAL 级别的错误时候,就不需要日志进行提示了,此时各种客诉,等等情况,会马上提醒,此时需要系统管理员迅速介入~

日志配置

我们可以在配置文件中,根据官方文档的一些提示来对日志进行配置

配置日志级别

设置 logging.level 配置项即可:

此时就可以观察运行结果,可以运行出 debug 日志了~

日志持久化

我们在线上环境中,需要把日志进行保存,方便日后进行溯源。

        1. 配置日志文件名

        2. 配置日志的存储目录

logging.file.name 配置中,既可以配置日志名称,也可以配置日志路径

logging.file.path 配置中,则只能配置日志路径,名称会默认为 springboot.log

如果两个都进行了配置,则只会生效一个,且 name 的优先级较高~

日志文件分割

随着项目运行,日志持久化的内容越来越多,需要对日志进行分割

配置日志格式

目前我们前面的打印格式都是默认的,我们也是可以自行进行配置的~

说明:

%clr(表达式){颜色} 设置输入日志的格式

%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} 日期和时间,精确度为毫秒

%5p 显示日志级别

%t 线程名

简单的日志输出

我们前面每次都使用 LoggerFactory.getLogger(xxx.class) 每个类都需要重复的添加一次,我们就想到了,使用注解来封装这条语句

lombok 给我们提供了封装的方法。

1. 添加 lombok 框架支持

2. 使用 @Slf4j 注解输出日志

完!

更多推荐