SpringBoot【日志文件的打印与输出】

简介: SpringBoot【日志文件的打印与输出】

🍎一.日志文件


image.png


🍒1.1 日志的作用


⽇志是程序的重要组成部分它在我们运行检查程序时用来发现和定位问题


除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

● 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户


● 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈


● 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持


以上这些都是⽇志提供的⾮常实⽤的功能


⽇志真⽤案例:

关键节点上的关键数据⽇志记录举例:例如,⽐抖音,在注册时候不⽌要在抖音添加⼀条⽤户记录,同时也会给抖音极速版添加⼀条⼀模⼀样的⽤户记录,这样做的⽬的是为了实现⼀次注册,多处使⽤的⽬的。不需要⽤户在两边系统注册了,等于在程序中以极低的成本实现的⽤户数据的同步,但这样设计有⼀个致命的问题,⽤户在抖音注册信息的时候,如果抖音挂了,那么⽤户的注册⾏为就会失败?因为⽤户在注册的时候需要同步注册到抖音极速版,但抖音极速版现在挂了,这个时候怎么办呢?


解决方案:

最简单的解决⽅案,抖音在注册的时候,不管抖音极速版是否注册成功,都给⽤户返回成功,那这个时候如果抖音极速版注册失败了怎么办?⾮常简单,如果注册失败了,记录⼀下⽇志,等抖音极速版系统恢复正常之后,把⽇志给抖音极速版的管理⼈员,让他⼿动将注册失败的⽤户同步到抖音极速版,这样就最低成本的解决了问题。这就是⽇志的重要作⽤


🍒1.2 怎样查看到日志信息


其实在我们使用Spring Boot框架运行时我们就已经在控制台中看到了日志的打印


6c7355d4449d490f8896727da2c60671.png


以上内容就是 Spring Boot 输出的控制台⽇志信息


通过上述⽇志信息我们能发现以下 3 个问题:

●Spring Boot 内置了⽇志框架(不然也输出不了⽇志)


●默认情况下,输出的⽇志并⾮是开发者定义和打印的,那开发者怎么在程序中⾃定义打印⽇志呢?


●⽇志默认是打印在控制台上的,⽽控制台的⽇志(内存)是不能被保存的,那么怎么把⽇志永久的保存下来呢


下⾯我们⼀起来找寻这些问题的答案


🍎二. 打印日志


🍒2.1 自定义打印日志


开发者⾃定义打印⽇志的实现步骤:


●在程序中得到⽇志对象


●使⽤⽇志对象的相关语法输出要打印的内容


注意:Logger 对象是属于 org.slf4j 包下的,不要导⼊错包。到问题类


  private final static Logger log = LoggerFactory.getLogger(类名.class)

⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位


@Controller
@ResponseBody  //动态页面
public class UserController {
    //1. 先得到日志对象(来自 slf4j)
    //通过日志工厂的getLogger()方法获取需要打印日志类中的对象
    private final static Logger log = LoggerFactory.getLogger(UserController.class);
    @RequestMapping("/sayhi")
    public void sayHi(){
        log.trace("我是trace 微量级比");
        log.debug("我是 debug 调试日志");
        log.info("我是 info 普通信息日志");
        log.warn("我是 warn 警告日志");
        log.error("我是 error 错误日志");
        // fatal 是导致程序崩坏的(致命bug)程序会自动去打印的
    }
}


我们在网页127.0.0.1:8080/sayhi 之后就可以在控制台看到打印出的日志


342e008fe49c4941950c049d3be4ed3c.png

🍒2.2 ⽇志格式说明


4930b2632eb54c5b9ff31bccb0251696.png

我们发现我们应该在打印台中看到日志的信息只有info warn error 三个级别,这是因为spring boot默认的日志打印级别为info

日志的级别是怎样的呢,记下了我们就要开始认识日志的级别了


🍎三.日志级别


🍒3.1 日志级别的作用


● ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间


● ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求


🍒3.2 日志级别的分类与使用


⽇志的级别分为:


●trace:微量,少许的意思,级别最低


●debug:需要调试时候的关键信息打印


●info:普通的打印信息(默认⽇志级别)


●warn:警告,不影响使⽤,但需要注意的问题


●error:错误信息,级别较⾼的错误⽇志信息


●fatal:致命的,因为代码异常导致程序退出执⾏的事件


5f1fc3648345448eb80eb4df01747118.png




越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了


🍒3.3 日志级别设置(重要)


⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示


# 设置全局日志级别
logging.level.root=info
@Controller
@ResponseBody  //动态页面
public class UserController {
    //1. 先得到日志对象(来自 slf4j)
    //通过日志工厂的getLogger()方法获取需要打印日志类中的对象
    private final static Logger log = LoggerFactory.getLogger(UserController.class);
    @RequestMapping("/sayhi")
    public void sayHi(){
        log.trace("我是trace 微量级比");
        log.debug("我是 debug 调试日志");
        log.info("我是 info 普通信息日志");
        log.warn("我是 warn 警告日志");
        log.error("我是 error 错误日志");
        // fatal 是导致程序崩坏的(致命bug)程序会自动去打印的
    }
}

清除掉配置⽂件中的⽇志设置,观察控制台输⼊的⽇志级别,得到以下结论,⽇志的输出级别,默认是 info

image.png


注意日志的定位只能在目录文件中,不能定位到类上


2671e48865d34e61a7b2631d63986ebe.png

d61af4ef96ae4205acd09636d49a913b.png


🍎四.lombok(简便型日志输出)


每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,这⾥讲⼀种更好⽤的⽇志输出⽅式,使⽤ lombok 来更简单的输出

  1. 添加 lombok 框架⽀持
  2. 使⽤ @slf4j 注解输出⽇志


🍒4.1 添加 lombok 依赖

<dependency>
<groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.18.20</version>
 <optional>true</optional>
</dependency>

🍒4.2 输出⽇志

@Controller
@ResponseBody
@Slf4j
public class UserService {
//    Logger log = LoggerFactory.getLogger(UserService.class);
    @RequestMapping("/sayhi2")
    public void sayHi2(){
        log.trace("我是 trace");
        log.debug("我是 debug");
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");
    }
}

注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名


🍒4.3 lombok工作原理


Lombok 的作⽤如下图所示:

lombok通过@Slf4j在运行时会生成一个private final static Logger log = LoggerFactory.getLogger(UserController.class)类似这个对象

524bbe57a5864dada0acdc7fe0f012ef.png


🍒4.4 lombok常见的注解


基本注解


注解 作⽤
@Getter ⾃动添加 getter ⽅法
@Setter ⾃动添加 setter ⽅法
@ToString ⾃动添加 toString ⽅法
@EqualsAndHashCode ⾃动添加 equals 和 hashCode ⽅法
@NoArgsConstructor ⾃动添加⽆参构造⽅法
@AllArgsConstructor ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull 属性不能为 null
@RequiredArgsConstructor ⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需


组合注解


注解 作⽤
@Data @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor


⽇志注解


注解 作⽤
@Slf4j 添加⼀个名为 log 的⽇志,使⽤ slf4j



🍎五.日志持久化(存储日志到硬盘)


以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追溯问题,把⽇志保存下来的过程就叫做持久化.想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了


配置⽇志⽂件的保存路径目录


# 设置日志保存的目录(日志存储大小是24kb,大于会默认生成(1)(2)这种类型名文件)
#logging.file.path=D:/Data/
logging.file.path=D:\\Data\\


配置日志文件的⽂件名


# 设置日志保存的名称
logging.file.name=D:/Data/spring-boot.log


a466c66370074901b30c7d751c592987.png


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
4月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
162 2
|
11月前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
886 4
springboot-多环境配置文件
|
11月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2757 1
|
5月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
970 5
|
11月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1249 0
|
11月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
1077 0
|
11月前
|
Java API 开发者
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
766 0
|
存储 前端开发 Java
Springboot静态资源映射及文件映射
在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler(&quot;/img/**&quot;).addResourceLocations(&quot;file:E:\\myProject\\forum_server\\&quot;)`配置,使前端可通过URL直接访问图片。
782 0
Springboot静态资源映射及文件映射
|
7月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
1323 5
|
11月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现