Spring Boot日志文件(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring Boot日志文件

Spring Boot日志文件(一)https://developer.aliyun.com/article/1393169

Ⅳ、System.out.println() VS 日志🍓

  1. 灵活性:使用日志框架可以方便地控制日志的输出级别,从而在不同环境中灵活地开启或关闭日志输出。而使用System.out.println()则需要手动添加或删除代码。
  2. 可配置性:日志框架可以通过配置文件来设置日志的输出格式、输出位置等信息,而System.out.println()则只能将日志输出到控制台。
  3. 性能优化:日志框架会对日志进行缓冲和异步处理,以提高程序的性能。而System.out.println()会直接将日志输出到控制台,可能会对程序的性能造成一定的影响。
  4. 可扩展性:使用日志框架可以方便地扩展和替换日志实现,例如切换到其他日志框架或自定义日志输出方式。而使用System.out.println()则需要手动修改代码。
  5. System.out.println() 不能被持久化(可接着看后面便知晓了)。

3、日志持久化🍉

以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。

想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后, Spring Boot 就会将控制台的日志写到相应的目录或文件下了。

Ⅰ、配置日志文件的保存路径:🍓

路径:🍒


#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: error
    com:
      example:
        springbootdemo: info
  # 设置⽇志⽂件的⽬录
  file:
    path: C:\\logs

在C盘创建应该logs文件夹:

image.png

路径+文件名: 🍒

我们可以自己定义.log的文件名:


# 设置⽇志⽂件的⽂件名
logging:
 file:
 name: C:\\logs\\spring-1.log

文件名: 🍒


#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: error
    com:
      example:
        springbootdemo: info
  # 设置⽇志⽂件的⽬录
  file:
      name: spring-1.log

如果直接指点文件名,那它就会直接在项目文件下直接生成.log文件:

image.png

Ⅱ、进行日志持久化 🍓


@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class UserController {
    private static final Logger logger= LoggerFactory.getLogger(UserController.class);
    @RequestMapping("Hi")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        logger.trace("我是trace");
        logger.debug("我是debug");
        logger.info("我是info");
        logger.warn("我是warn");
        logger.error("我是error");
        System.out.println("我是System。");
        return "Hi,Spring Boot";
    }
}

运行代码:

打开控制台:

image.png

打开logs:

image.png

打开这spring.log:

image.png

可以发现这和控制台打印的一模一样。但是没有打印 System.out.println(),这是因为日志的持久化只会保存日志信息,其他信息是不会去保存的。

Ⅲ、日志是追加or覆盖?🍓

如果我们重新运行代码,这个spring.log里面的内容是被覆盖还是被追加呢?

现在我们重新运行代码,打开spring.log看看:

image.png

可以看到日志的内容是追加的,所以不用担心日志会被覆盖或者消失,但是如果一直把它放在一个.log文件里面,那它越来越大,这怎么办啊?这时候就应该去查看一下官方文档:

官方文档

image.png

可以看到,日志持久化文件最大为10M,当超过10M是它会重新创建一个新的持久化文件。还有其他持久化设置,感兴趣的可以去了解一下。

三、更简单的日志输出—lombok🍭

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

  1. 添加 lombok 框架支持。
  2. 使⽤ @slf4j 注解输出日志

1、添加 lombok 依赖🍉


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

但是我们在创建Spring Boot时就已经导入了Lombok框架了:

image.png

pom.xml:

image.png

Ⅰ、旧项目添加新依赖框架 🍓

安装EditStarters:

image.png

然后在pom.xml里面右键选择 Generate

image.png

选择Edit Starters

image.png

点击OK

image.png

添加需要添加的依赖:

image.png

添加完成之后,重新reload就行了。

2、输出日志🍉


package com.example.springbootdemo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
@Slf4j
public class ArticleController {
    @RequestMapping("art")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
        return "Hi,Article";
    }
}

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

控制台打印:

image.png

3、lombok原理解释🍉

lombok 能够打印日志的密码就在 target 目录里面,target 为项目最终执行的代码,查看 target 目录。如下:

自己所写的代码:

image.png

在target目录中,您可以找到编译后的项目代码

image.png

可以看到lombok会直接给你生成注释对应的代码 ,这就特别省事了。

Java 程序的运行原理

image.png

Lombok 的作⽤如下图所示:

image.png

4、lombok 更多注解说明🍉

基本注解

image.png

组合注解

image.png

⽇志注解

image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
21天前
|
XML 前端开发 Java
基于SpringBoot 3.3实现任意文件在线预览功能的技术分享
【8月更文挑战第30天】在当今的数字化办公环境中,文件在线预览已成为提升工作效率、优化用户体验的重要功能之一。无论是文档、图片、PDF还是代码文件,用户都期望能够直接在浏览器中快速查看而无需下载。本文将围绕如何在Spring Boot 3.3框架下实现这一功能,分享一系列技术干货,助力开发者高效构建文件预览服务。
103 2
|
26天前
|
Java Apache 开发工具
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
|
10天前
|
消息中间件 存储 监控
Kafka的logs目录下的文件都是什么日志?
Kafka的logs目录下的文件都是什么日志?
26 11
|
10天前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
50 1
|
25天前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
20天前
|
人工智能 Java Spring
Spring框架下,如何让你的日志管理像‘AI’一样智能,提升开发效率的秘密武器!
【8月更文挑战第31天】日志管理在软件开发中至关重要,不仅能帮助开发者追踪问题和调试程序,还是系统监控和运维的重要工具。在Spring框架下,通过合理配置Logback等日志框架,可大幅提升日志管理效率。本文将介绍如何引入日志框架、配置日志级别、在代码中使用Logger,以及利用ELK等工具进行日志聚合和分析,帮助你构建高效、可靠的日志管理系统,为开发和运维提供支持。
27 0
|
25天前
|
监控 Java Serverless
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
|
26天前
【Azure Function & Application Insights】调用Function上传和下载文件,有时候遇见大于1MB的文件的日志没有记录在Application Insights中
【Azure Function & Application Insights】调用Function上传和下载文件,有时候遇见大于1MB的文件的日志没有记录在Application Insights中
|
26天前
|
存储 Java Spring
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
|
Java 应用服务中间件 Spring
Spring Boot的依赖配置文件的解析
Spring Boot的依赖配置文件的解析
106 0