文章目录
目录
前言
大家好,今天给大家介绍一下SpringBoot日志
1.日志概述
1.1 为什么要学习日志?
随着项目的复杂度提升, 我们对日志的打印也有了更高的需求, 而不仅仅是定位排查问题. 比如需要记录一些用户的操作记录(一些审计公司会要求), 也可能需要使用日志来记录用户的一些喜好, 把日志持久化, 后续进行数据分析等. 但是 System.out.print 不能很好的满足我们的需求, 我们就 需要使用一些专门日志框架(专业的事情交给专业的人去做)
1.2 ⽇志的⽤途
1.2.1 系统监控
监控系统通常会记录系统的运行状态、方法的响应时间、响应状态等数据,并通过数据分析和设置规则来进行报警。对于日志中关键字的统计也是常见的需求之一。当关键字数量达到一定条件时,可以触发报警。日志记录和分析可以帮助我们实时监控系统的运行情况,及时发现问题并采取相应的措施。
1.2.2 数据采集
- 数据统计: 统计页面的浏览量(PV), 访客量(UV), 点击量等, 根据这些数据进行数据分析, 优化公司运营策略
- 推荐排序: 目前推荐排序应用在各个领域, 我们经常接触的各行各业很多也都涉及推荐排序, 比如购物, 广告, 新闻等领域. 数据采集是推荐排序工作中必须做的一环, 系统通过日志记录用户的浏览历史, 停留时长等, 算法人员通过分析这些数据, 训练模型, 给用户做推荐.
- 日志审计: 随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上. 网络安全越来越受到大家的关注, 系统安全也成为了项目中的一个重要环节, 安全审计也是系统中非常重要的部分. 国家的政策法规、行业标准等都明确对日志审计提出了要求. 通过系统日志分析,可以判断一些非法攻击, 非法调用,以及系统处理过程中的安全隐患
2. 日志使用
2.1 非注解方式
直接通过org.slf4j包下日志工厂类LoggerFactory得到
package com.example.mvc.controller.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/log")
public class LogController {
private Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping("/hello")
public String hello(){
logger.info("你好 日志!");
return "hello log";
}
}
2.2 注解方式 @Slf4j
2.3 日志格式
1.时间日期:精确到毫秒
2. 日志级别:ERROR, WARN, INFO, DEBUG 或TRACE
3. 进程ID
4. 线程名
5. Logger名(通常使⽤源代码的类名)
6. 日志内容
2.4 日志级别
日志级别代表着日志信息对应问题的严重性, 为了更快的筛选符合目标的日志信息
日志的级别从高到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE
- FATAL: 致命信息,表示需要立即被处理的系统级错误.
- ERROR: 错误信息, 级别较高的错误日志信息, 但仍然不影响系统的继续运行.
- WARN: 警告信息, 不影响使用, 但需要注意的问题
- INFO: 普通信息, 用于记录应用程序正常运行时的⼀些信息, 例如系统启动完成、请求处理完成等.
- DEBUG: 调试信息, 需要调试时候的关键信息打印.
- TRACE: 追踪信息, 比DEBUG更细粒度的信息事件(除非有特殊⽤意,否则请使用DEBUG级别替代)
2.5 ⽇志配置
2.5.1 配置⽇志级别
日志级别配置只需要在配置⽂件中设置"logging.level"配置项即可
Properties配置
logging.level.root: debug
yml配置
logging
level
root: info
2.5.2 日志持久化
以上的日志都是输出在控制台上的, 然⽽在线上环境中, 我们需要把日志保存下来, 以便出现问题之后追 溯问题. 把日志保存下来就叫持久化.
日志持久化有两种方式:
1. 配置日志⽂件名
2. 配置日志的存储目录
方式一
logging.file.name: logger/springboot.log
方式二
logging.file.path: D:/temp
如果两种方式都进行了配置,以logging.file.name为准
2.5.3 日志分割
如果我们的日志都放在⼀个文件中, 随着项目的运行, 日志文件会越来越大, 需要对日志文件进行分割.
配置项 | 说明 | 默认值 |
logging.logback.rollingpolicy.file-name-pattern | ⽇志分割后的⽂件名格式 | ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz |
logging.logback.rollingpolicy.max-file-size | ⽇志⽂件超过这个⼤ ⼩就⾃动分割 | 10MB |
properties配置文件
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i
logging.logback.rollingpolicy.max-file-size=1KB
3. 门面模式
3.1 日志框架
SLF4J不同于其他日志框架, 它不是⼀个真正的日志实现, 而是⼀个抽象层, 对日志框架制定的⼀种规范, 标准, 接口. 所有SLF4J并不能独立使用, 需要和具体的日志框架配合使用
3.2 门面模式(外观模式)
定义 : 门面模式(Facade Pattern)又称为外观模式, 提供了⼀个统⼀的接口, 用来访问子系统中的⼀群接口. 其主要特征是定义了⼀个高层接口, 让子系统更容易使用
原⽂: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higherlevel interface that makes the subsystem easier to use.
解释:要求⼀个子系统的外部与其内部的通信必须通过⼀个统⼀的对象进行. 门面模式提供⼀个高层 次的接口,使得子系统更易于使用
门面模式主要包含2种角色:
- 外观角色(Facade): 也称门面角色,系统对外的统一接口。
- 子系统角色(SubSystem): 可以同时有一个或多个 SubSystem。每个 SubSystem 都不是一个单独的类,而是一个类的集合。SubSystem 并不知道 Facade 的存在,对于 SubSystem 而言,Facade 只是另一个客户端而已(即 Facade 对 SubSystem 透明)。
总结
以上就是这篇博客的主要内容了,大家多多理解,下一篇博客见!