针对业务开发人员通常面对的业务需求,我们将日志分为操作(请求)日志和系统运行日志,操作(请求)日志可以让管理员或者运营人员方便简单的在系统界面中查询追踪用户具体做了哪些操作,便于分析统计用户行为;系统运行日志又分为不同的级别(Log4j2): OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL,这些日志级别由开发人员在代码编写时确定,并编写在代码中,系统运行时记录,方便系统开发人员分析定位解决问题,查找系统性能瓶颈。
我们可以自定义注解利用AOP拦截Controller请求实现系统(日志)操作日志的记录,系统运行日志可以使用log4j2或者logback。在SpringCloud微服务架构下,可以使用Gateway统一记录操作(请求)日志,由于微服务分布式集群部署,同一服务也存在多个,这里的日志追踪就需要借助Skywalking和ELK来实现具体的追踪分析记录。
由于最近爆发的log4j2和logback的漏洞问题,请选择最新修复漏洞的版本。根据网上很多性能的对比,log4j2显著优于logback,所以我们将SpringBoot默认的日志Logback修改为Log4j2。
在设计框架时,尽量考虑日志系统的使用场景,将日志系统的实现设计为可动态配置,然后根据业务需求选择合适的日志系统。根据常见的业务需求,我们临时实现微服务日志系统如下:
[En]
When designing the framework, we consider the usage scenario of the log system as much as possible, design the implementation of the log system as dynamically configurable, and then choose the appropriate log system according to the business requirements. According to the common business requirements, we temporarily implement the micro-service log system as follows:
操作日志:
- 使用AOP特性,自定义注解拦截Controller请求实现系统操作日志
优势:实现简单,通过注解即实现记录操作日志。
缺点:需要硬编码到代码中,灵活性差。 - 在网关Gateway通过读取配置,统一记录操作日志
优势:可配置,实时更改需要记录哪些操作日志。
缺点:配置实现稍复杂。
操作日志分为两种实现方式,各有优劣,不管哪种实现方式,日志记录都通过Log4j2来记录,通过Log4j2的配置,可动态选择记录到文件、关系型数据库MySQL、NoSQL数据库MongoDB、消息中间件Kafka等。
系统日志:
- Log4j2记录日志,ELK采集分析展示
系统日志我们就采取通用的日志记录方式即可,通过Log4j2记录到日志文件,在通过ELK采集分析展示。