SLF4J日志框架

相关系列文章


前言

SLF4J官网地址 : https://www.slf4j.org/
SLF4J, 简单的的日志门面(Simple Logging Facade for Java), 官方说是可以用作各种日志框架(如java.util.loggiong logback log4j)的简单外观或抽象, 允许最终用户在部署时插入所需的日志框架, 简单理解和JDBC原理差不多, JDBC不关心具体的数据库实现, SLF4J也不关心具体日志框架实现

为什么用SLF4J
低耦合: 不关心具体的日志实现框架, 可以不改代码下, 修改日志框架实现
作用范围广: 它可以在代码中添加一些输出日志的语句, 使得这些日志可以输出到控制台, 或文件, 甚至数据库中
灵活输出: 可以定义日志级别, 在项目中, 灵活调配日志输出级别, 实现信息输出


提示:以下是本篇文章正文内容,下面案例可供参考

一、引入SLF4J

在Spring Boot项目中, Spring-boot-starter中已经集成了日志的依赖项, 是可以直接使用, 在使用时还需要添加Lombok依赖, 下载Lombok插件 跳转, 简化代码的Lombok

Lombok依赖(在SpringBoot创建时勾选Lombok, 依赖会自动导入)

<!-- lombok依赖包 -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

如图: 是创建Spring Boot项目后, 自动整合的SLF4J依赖

在这里插入图片描述

可以看到SpringBoot中默认使用的日志实现是logback框架

二、日志级别

在SLF4J日志框架中, 会将日志的重要程度分为几个级别, 常用级别中, 从不重要到重要, 依次是:

  1. trace : 跟踪
  2. debug : 调试
  3. info : 一般信息
  4. warn : 警告
  5. error : 错误

在开发中, 应该根据要输出的内容敏感的程度, 重要性来选择调用某个方法, 以输出对应级别的日志, 如涉及关键数据应该使用tracedebug级别, 这样当交付项目是, 将设置日志显示级别的配置删除, 或显示的配置为info级别, 则tracedebug级别的日志都不会被输出

例如: 设置项目日志显示级别

application.properties中添加配置, 用于控制日志输出级别, logging.level后面跟的是包名, 配置的是根包, 配置后此包及其子孙包都会应用此配置, 包名设置完=右边设置显示级别

# SLF4J设置日志的显示级别
logging.level.cn.qingtian.slf4j=trace

在配置日志显示级别时 :

  • 当显示级别为info时, 只会显示info warn error
  • 当显示级别为debug时, 只会显示debug info warn error
  • 当显示级别为trace时, 会显示所有级别的日志

三、控制台输出

调用日志, 需要在日志输出类上添加@SLF4J注解, 只有被此注解标注的类, 类中才能调用log方法, 设置日志级别

例如: 在cn.qingtian.slf4j.controller包下创建UserController类

package cn.qingtian.slf4j.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    // 获取用户的请求
    @GetMapping("/get")
    public String getUser(){
        log.debug("[用户控制器]开始获取用户数据");
        String user = "username=jerry,password=123456";
        log.debug("[用户控制器]已经获取到用户数据user={}",user);
        log.info("[用户控制器]已处理获取用户的请求");
        return user;
    }
    // 各级别日志的输出
    @GetMapping("/log")
    public void log(){
        log.trace("[trace]级别日志,执行类: {},执行方法: {}",this.getClass().getName(),"log");
        log.debug("[debug]级别日志,执行类: {},执行方法: {}",this.getClass().getName(),"log");
        log.info("[info]级别日志,执行类: {},执行方法: {}",this.getClass().getName(),"log");
        log.warn("[warn]级别日志,执行类: {},执行方法: {}",this.getClass().getName(),"log");
        log.error("[error]级别日志,执行类: {},执行方法: {}",this.getClass().getName(),"log");
    }
}

关于输出日志的方法, 都是被重载了很多次, 如果只输出1个字符串, 应该使用

public void debug(String msg);

如果这个字符串需要拼接多个变量的值, 应该使用

public void debug(String format, Object... arguments);

例如:

log.debug("以获取到数据, 数据={}",data);

以上使用此方法拼接字符串, 会缓存、预编译字符串, 再将值带入去执行, 所以执行效率远高于System.out.println()的输出语句

四、本地输出

在项目配置文件application.properties中写入:

# SLF4J设置日志的显示级别
logging.level.cn.qingtian.slf4j=trace
# SLF4J设置日志输出到文件, 此处必须写绝对路径, 如果文件不存在会自动创建(包括目录不存在也会自动创建)
logging.file.name=D:/sql1/Slf4j-log.txt

SLF4J设置日志输出到文件, 此处必须写绝对路径, 如果文件不存在会自动创建(包括目录不存在也会自动创建)

五、效果演示

项目目录结构

在这里插入图片描述

启动项目, 此时日志显示级别为trace, 在浏览器中分别访问http://localhost:8080/user/gethttp://localhost:8080/user/log

控制台输出为:

在这里插入图片描述
本地日志文件为:

在这里插入图片描述

再次启动项目, 设置日志显示级别为info, 在浏览器中分别访问http://localhost:8080/user/gethttp://localhost:8080/user/log

控制台输出为:在这里插入图片描述
本地日志文件为:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值