springBoot的日志文件

日志是程序的重要组成部分,主要可以用来定位和排查问题。除此之外,还可以用来:

  1. 记录用户的登录日志,方便分析用户是正常登录还是恶意破解;

  2. 记录系统的操作日志,方便数据恢复和定位操作人;

  3. 记录程序执行时间,方便优化程序和提供数据支持;

在 springBoot 中内置了日志框架:SLF4J+logback,这两者的关系就类似于JDBC 和 MySQL之间,SLF4J对于日志的多种实现方式做了统一。所以在程序中进行自定义日志输出的时候,也通常是借助于SLF4J框架来输出日志;

一. 自定义日志打印

1. 获取日志对象

  1. 每个类都有自己的日志对象,所以习惯用 private 修饰;

  2. 为了方便调用,习惯用 static 修饰;

  3. 且该日志对象不希望被修改,习惯用 final 修饰;

  4. Logger 是一个接口,无法直接 new 对象,一般借助 LoggerFactory.getLogger 方法获取日志对象;

java 复制代码
private static final Logger log = LoggerFactory.getLogger(类对象);

注意 Logger 对象要选择 slf4j 包下的!!!

2. 使用日志对象打印日志

使用对应方法来打印对应层级的日志;

java 复制代码
        log.trace("i'm trace");     
        log.debug("i'm debug");    
        log.info("i'm info");
        log.warn("i'm warn");
        log.error("i'm error");

3. 日志格式说明

二. 日志级别

日志级别可以帮助我们筛选出重要的信息,可以通过控制日志级别,来让日志内容更加准确明了;

日志级别可以控制不同环境下,打印出不同的日志内容,例如在开发环境下,需要很多详细的信息,而生产环境下,为了保证性能,一般就会需要较少的日志,此时就可以提供日志级别来实现这个需求;

1. 日志级别的分类和使用

trace:级别最低;

debug: 调试时候的关键信息打印;

info:默认的日志级别;

warn:警告,不影响使用;

error:错误信息;

fatal:致命的,因为代码异常导致程序退出执行;

级别越高,能接收的信息就越少,例如设置为 warn 级别的时候,此时就只能接受 warn,error,fatal 级别的日志了。

2. 日志级别的设置

日志级别的设置可以通过配置文件来配置;

java 复制代码
# root 设置了默认级别
logging:
    level:
        root:error

也可以针对文件路径来另外设置,例如将 com.example.demo 路径下的日志级别设置为 trace:

java 复制代码
logging:
    level:
        root:
        com:
            example:
                demo:trace

三. 日志持久化

所谓日志持久化,也就是将日志内容保存下来,因为在生产环境下,通常需要保存好日志文件,方面后续进行追溯;

同样是在配置文件中进行配置,指定日志文件的存储目录和文件名;

java 复制代码
# 日志保存路径     绝对路径!
# 只设置name的话,此时路径就和项目的路径是一起的
# 也可以在 name 的基础上加上路径
logging:
  file:
#    path: D:\\test\\
#    name: springboot.log
    name: D:\\test\\springboot.log

并且存储的 springboot.log日志文件是实时更新的。日志文件的最大容量是 10MB。

四. 更加简单的实现日志打印

使用 @slf4j 注解,前提是要有 Lombok 框架支持;

@slf4j 是一个类注解,表示给当前类中添加一个叫做 log 的日志对象(这是 lombok 提供的对象名),此处的 log 对象就是 slf4j 中提供的 Logger 对象;

java 复制代码
@RestController
@Slf4j  
public class LoggerController {
    @RequestMapping("/log")
    public String sayHi(){
        log.info("我是 log 的 info");
        log.error("我是 log 的 error");
        return "hello3";
    }
}

五. Lombok的原理

此处再简单补充一下 Lombok 的一些原理知识:Lombok实在编译时期起作用的;

Lombok在程序中运行时起到的作用就是,使用注解代替,来快捷的实现一些语句。这点可以通过 target 目录来观察;target 为项目最终执行的代码;

在 target 中,注解 @slf4j ,就自动的转换为构造日志对象的语句了。

Lombok 还有很多注解是经常用到的:

  1. @Getter:自动添加 getter 方法

  2. @Setter:自动添加 setter 方法

  3. @ToString:自动添加 toString 方法

组合注解:@Data:包括 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

相关推荐
向宇it5 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行7 分钟前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想1 小时前
JMeter 使用详解
java·jmeter
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇1 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
Yvemil72 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。2 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
计算机学长felix2 小时前
基于SpringBoot的“交流互动系统”的设计与实现(源码+数据库+文档+PPT)
spring boot·毕业设计