SpringBoot日志

日志概述

日志对于我们来说其实并不陌生,早在SE阶段我们就用过System.out.println来打印日志,通过打印日志来定位和调试程序中的一些问题,或者根据日志分析程序运行过程,在spring学习阶段,也经常根据控制台的日志来分析和打印问题。

随着项⽬的复杂度提升, 我们对⽇志的打印也有了更⾼的需求, ⽽不仅仅是定位排查问题.。⽐如需要记录⼀些⽤⼾的操作记录(⼀些审计公司会要求), 也可能需要使⽤⽇志来记录⽤⼾的⼀些喜好, 把⽇志持久化, 后续进⾏数据分析等. 但是 System.out.print 不能很好的满⾜我们的需求, 我们就需要使⽤⼀些专⻔⽇志框架。

日志用途

除了上述的发现、分析、定位问题外,日志还有许多别的用途。

1.系统监控

监控现在⼏乎是⼀个成熟系统的标配, 我们可以通过⽇志记录这个系统的运⾏状态, 每⼀个⽅法的响应时间, 响应状态等, 对数据进⾏分析, 设置不同的规则, 超过阈值时进⾏报警.。⽐如统计⽇志中关键字的数量,并在关键字数量达到⼀定条件时报警,这也是⽇志的常⻅需求之⼀。

2.数据采集

数据采集是⼀个⽐较⼤的范围, 采集的数据可以作⽤在很多⽅⾯, ⽐如数据统计, 推荐排序等。

数据统计

统计⻚⾯的浏览量(PV), 访客量(UV), 点击量等, 根据这些数据进⾏数据分析, 优化公司运营策略。

推荐排序

⽬前推荐排序应⽤在各个领域, 我们经常接触的各⾏各业很多也都涉及推荐排序, ⽐如购 物, ⼴告, 新闻等领域. 数据采集是推荐排序⼯作中必须做的⼀环, 系统通过⽇志记录⽤⼾的浏览历 史, 停留时⻓等, 算法⼈员通过分析这些数据, 训练模型, 给⽤⼾做推荐。

3.日志审计

随着互联⽹的发展,众多企业的关键业务越来越多的运⾏于⽹络之上.。⽹络安全越来越受到⼤家的关注, 系统安全也成为了项⽬中的⼀个重要环节, 安全审计也是系统中⾮常重要的部分。国家的政策法规、 ⾏业标准等都明确对⽇志审计提出了要求. 通过系统⽇志分析,可以判断⼀些⾮法攻击, ⾮法调⽤,以 及系统处理过程中的安全隐患。

日志使用

Spring内置了日志框架Sel4j,我们可以直接在程序中调用Sel4j框架打印日志。

打印日志

得到日志对象

通过日志工厂(LoggerFactory)的工厂方法来得到日志对象。

private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

使用日志对象打印日志

⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所示:

日志框架介绍

SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范, 标准, 接⼝。所以SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤。

日志格式

日志格式

从上图我们可以看到,日志输出的元素由以下几部分组成。

1.时间(精确到毫秒)

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

3.进程id

4.线程名

5.Logger名(通常使⽤源代码的类名)

6.日志内容

日志级别

⽇志级别代表着⽇志信息对应问题的严重性, 为了更快的筛选符合⽬标的⽇志信息。

⽇志的级别从⾼到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE。

FATAL: 致命信息,表⽰需要⽴即被处理的系统级错误.。

ERROR: 错误信息, 级别较⾼的错误⽇志信息, 但仍然不影响系统的继续运⾏.。

WARN: 警告信息, 不影响使⽤, 但需要注意的问题。

INFO: 普通信息, ⽤于记录应⽤程序正常运⾏时的⼀些信息, 例如系统启动完成、请求处理完成等。

DEBUG: 调试信息, 需要调试时候的关键信息打印。

TRACE: 追踪信息, ⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)

配置日志级别

可以通过SpringBoot的配置文件来修改日志的级别。

logging:
  level:
    root: info

修改root中的参数可以改变日志文件的打印类型。 

现在可以看到日志级别只显示为debug级别的日志。

日志持久化保存

同样可以通过SpringBoot的配置文件来持久化保存日志。

通过配置logging.file.name下的属性可以修改日志存储文件夹和日志名。

logging:
  level:
    root: info
  file:
    name: logger/springboot.log

可以观察到日志都被保存在了日志文件中。

配置日志文件分割

如果我们的⽇志都放在⼀个⽂件中, 随着项⽬的运⾏, ⽇志⽂件会越来越大,需要对配置文件分割。

通过修改logging.logbakc.rollingpolicy.下的max-file-size和file-name-pattern可以修改分割日志文件大小和日志名称格式。

logging:
  level:
    root: info
  file:
    name: logger/springboot.log
  logback:
    rollingpolicy:
      max-file-size: 1024KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

Lombok打印日志

lombok提供的 @Slf4j 会帮我们提供⼀个⽇志对象 log。此时不需要我们手动生成logger对象,直接调用对象方法即可。

@RestController
@Slf4j
public class LoggerController {
    @RequestMapping("/logger")
    public String logger(){
        log.info("----------------打印日志----------------");
        return "日志打印";
    }
}

可以看到日志也被正确打印了出来。

总结

1. ⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 内容了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印⾃定义⽇志 。

2.⽇志包含 6 个级别, ⽇志级别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称或保存⽬录来将⽇志持久化。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值