日志概述
为什么要学习日志
日志对我们来说并不陌生,从 JavaSE
部分,我们就在使用 System.out.print
来打印日志了。通过打印日志来发现和定位问题,或者根据日志来分析程序的运行过程。在 Spring
的学习中,也经常根据控制台的日志分析和定位问题
随着项目的复杂度提升,我们对日志的打印也有了更高的需求,而不仅仅是定位排查问题
比如需要记录一些用户的操作记录(一些审计公司会要求),也可能需要使用之日来记录用户的一些喜好,把日志持久化,后续进行数据分析等。但是 System.out.print
不能很好的满足我们的需求,我们就需要使用一些专门日志框架(专业的事交给专业的人去做)
日志的用途
通过前面的学习,我们知道日志主要是为了发现问题,分析问题,定位问题的,但除此之外,日志还有很多用途
1 . 系统监控
监控现在几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,每一个方法的响应时间,响应状态等,对数据进行分析,设置不同的规则,超过阈值时进行抱紧
- 比如统计日志中关键字的数量,并在关键字数量达到一定条件时报警,这也是日志的常见需求之一
2 . 数据采集
数据采集是一个比较大的范围,采集数据可以作用在很多方面,比如数据统计,推荐排序等
- 数据统计:统计页面的浏览量(
PV
),访客量(UV
),点击量等,根据这些数据进行数据分析,优化公司运行策略 - 推荐排序:目前推荐排序应用在各个领域,我们经常接触的各行各业很多也都涉及推荐排序,比如购物,广告,新闻等领域。数据采集是推荐排序工作中必须做的一环,系统通过日志记录用户的浏览历史,停留时长等,算法人员通过分析这些数据,训练模型,给用户做推荐
下图中的数据源,其中一部分就来自于日志记录的数据
3. 日志审计
随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上。网络安全越来越受到大家的关注,系统安全也成为了项目中的一个重要环节,安全审计也是系统中非常重要的部分。
国家的政策法规、行业标准等都明确对日志审计提出了要求。通过系统日志分析,可以判断一些废话共计,非法调用,以及系统处理过程中的安全隐患
- 比如,大家平时都在做运营系统,其中运营人员在通过界面处理一些数据的时候,如果没有清楚的日志操作记录,一条数据被删除或者修改,你是无法找到的是谁操作的,但是如果你做了相应的记录,该数据被谁删除或者修改就会一目了然
- 还有一些内部的违规和信息泄露(比如客户信息被卖掉)现象出现后,如果未记录留存日志,为事后调查提供依据,则事后很难追查(一些公司查看客户的信息都会被记录日志,如果频繁查询也会报警)
日志使用
SpringBoot
项目在启动的时候默认就有日志输出,如下图所示:
它打印的日志和 System.out.print
有什么不同呢?
- 其打印的日志很单调,比
SpringBoot
打印的缺少了很多信息 SpringBoot
内置了日志框架Slf4j
,我们可以直接在程序中调用Slf4j
来输出日志
打印日志
打印日志的步骤:
- 在程序中得到日志对象
- 使用日志对象输出要打印的内容
在程序中得到日志对象
在程序中获取日志对象需要使用日志工程 LoggerFactory
,如下代码所示:
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
LoggerFactory.getLogger
需要传递一个参数,表示这个日志的名称。这样我们可以更清晰的知道是哪个类输出的日志- 当有问题时,可以更方便直观地定位到问题类
注意:Logger
对象是属于 org.slf4j
包下的,不要导入错包
使用日志对象打印日志
日志对象的打印方法有很多种,我们可以先使用 info()
方法来输出日志,如下代码所示:
@RestController
public class LoggerController {
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
@RequestMapping("/logger")
public String logger() {
logger.info("----------------要输出日志的内容----------------");
return "打印日志";
}
}
打印日志效果展示: