Spring Boot日志文件(一)

简介: Spring Boot日志文件

一、日志的作用🍭

日志是程序的重要组成部分,想象一下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的原因吗?

答案是否定的,写程序不是买彩票,不能完全靠猜,因此日志对于我们来说,最主要的用途就是排除和定位问题。

Spring Boot日志文件用于记录应用程序的运行日志。它可以帮助开发人员在应用程序出现问题时进行故障排除和调试。以下是Spring Boot日志文件的几个用途:

  1. 故障排除:当应用程序发生错误或异常时,日志文件可以提供有关错误发生的上下文信息,如错误堆栈跟踪、错误消息等。开发人员可以根据这些信息来定位和修复问题。
  2. 调试:日志文件可以记录应用程序的运行过程中的详细信息,如请求参数、方法调用、返回结果等。这些信息可以帮助开发人员理解应用程序的运行流程,定位潜在的问题,并进行性能优化。
  3. 监控和性能分析:通过分析日志文件,开发人员可以获取应用程序的运行状态和性能指标,如请求响应时间、吞吐量、并发请求数等。这些信息可以帮助开发人员监控应用程序的健康状况,并进行性能分析和优化。
  4. 安全审计:日志文件可以记录应用程序的操作日志,如用户登录、数据修改等。这些信息可以用于安全审计和追踪用户行为。

所以 Spring Boot日志文件是开发人员在应用程序运行过程中进行故障排除、调试、性能分析和安全审计的重要工具。

1、日志真实使用案例:🍉

比如当我们去百度注册账号时,在注册时候百度不止要在后台添加 一条用户记录,同时也会给百度贴吧添加一条一模一样的用户记录,这样做的目的是为了实现一次注 册,多处使用的目的。不需要用户在两边系统注册了,等于在程序中以极低的成本实现的用户数据的同 步,但这样设计有一个致命的问题,用户在百度注册信息的时候,如果百度贴吧挂了,那么用户的注册 行为就会失败,因为用户在注册的时候需要同步注册到百度系统,但贴吧现在挂了,这个时候怎么办 呢?

最简单的解决方案,百度账号在注册的时候,不管贴吧是否注册成功,都给用户返回成功,如果注册失败了,记录一下日志,等贴吧恢复正常之后,把日志给贴吧的管理人员,让他手动将注册失败的用户同步到贴吧系统,这样就最低成本的解决了问题。这就是日志的重要作用。

二、日志怎么用🍭

Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:

image.png

以上内容就是 Spring Boot 输出的控制台日志信息。 通过上述日志信息我们能发现以下 3 个问题:

  1. Spring Boot 内置了日志框架(不然也输出不了日志)。
  2. 默认情况下,输出的日志并⾮是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢?
  3. 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久的保存下来呢?

下面我们一起来找寻这些问题的答案。

1、自定义日志打印🍉

开发者自定义打印日志的实现步骤:

  • 在程序中得到日志对象。
  • 使用日志对象的相关语法输出要打印的内容

Ⅰ、在程序中得到日志对象🍓

在程序中获取日志对象需要使用日志工厂 LoggerFactory:


// 1.得到⽇志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
//⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位 到问题类。

Logger 对象是属于 org.slf4j 包下的,不要导入错包。

image.png

常见的日志框架说明(了解)🍒

image.png

Ⅱ、使用日志对象打印日志 🍓

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


// 2.使⽤⽇志打印⽇志
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class UserController {
    private static final Logger logger= LoggerFactory.getLogger(UserController.class);
    @RequestMapping("Hi")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        logger.info("--------------要输出⽇志的内容----------------");
        return "Hi,Spring Boot";
    }
}

打印信息 :

控制台打印:

image.png

浏览器打印(使用的是生产环境,生产环境设置的端口号为:7777):

image.png

2、日志的级别🍉 Ⅰ、日志级别有什么用?🍓

  • 日志级别可以控制不同环境下,⼀个程序是否需要打印日志,如开发环境我们需要很详细的信息, 而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。
  • 日志级别可以帮你筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。

Ⅱ、日志级别的分类与使用🍓

日志的级别分为:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认日志级别);
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志信息;
  • fatal:致命的,因为代码异常导致程序退出执行的事件(软件或系统运行过程中发生了严重错误或异常,导致程序无法继续正常执行而必须终止的日志记录),我们是无法主动的去打印fatal日志。

image.png

日志级别的顺序:

image.png

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

下面我们来看一下下面的代码,来更深入了解一下日志的级别:


@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");
        return "Hi,Spring Boot";
    }
}

控制台打印:

image.png

我们发现只打印了三个,我们不是还打印了trace还有debug吗?

这是因为日志设置的默认级别是info,所以只能打印info级别下面的日志。

Ⅲ、日志级别设置🍓

日志级别配置只需要在配置文件中设置“logging.level”配置项即可:


#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: trace

我们设置默认级别为:trace。看控制台打印:

image.png

我们看到设置为trace后,我们要求打印都打印了。但设置为trace之后,可能会导致日志文件过大或者打印输出过长,这可能会给查看和分析日志带来一些困难。

为了解决这个问题,可以考虑以下几个方法:

  1. 调整日志级别:将日志级别设置为更高的级别,例如将级别从trace调整为debug、info或者warn。这样可以减少不必要的日志输出,只保留关键信息。
  2. 筛选日志输出:通过使用日志过滤器或者正则表达式,只打印特定关键字或者模式匹配的日志信息。这样可以减少无关的日志输出,只保留需要的部分。
  3. 分割日志文件:设置日志文件大小限制或者定期将日志文件进行分割,可以防止单个日志文件过大。这样可以方便查看和管理日志文件。
  4. 使用日志分析工具:使用专门的日志分析工具,可以对大量的日志进行快速搜索、过滤和分析。这样可以更方便地查找和定位问题。

所以在通常,默认 默认级别为info即可,看warn日志和error日志即可。对于warn和error级别的日志消息,你也可以选择查看。

日志级别的设置是特别灵活的,我们还可以针对不同的目录设置不同的日志级别


#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: info
    com:
      example:
        springboard:info

有人说:我打印可以使用System.out.println()啊,为什么一定要使用日志呢?下面我们来比较一下

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


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
15 0
|
1天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
9 0
|
1天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
8 0
|
1天前
|
JavaScript Java API
【JavaEE】Spring Boot - 日志文件
【JavaEE】Spring Boot - 日志文件
6 0
|
1天前
|
Oracle 关系型数据库
|
1天前
|
安全 JavaScript Java
springboot实现文件防盗链设计
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!
46 13
springboot实现文件防盗链设计
|
1天前
|
Go 文件存储 iOS开发
LabVIEW崩溃后所产生的错误日志文件的位置
LabVIEW崩溃后所产生的错误日志文件的位置
10 0
|
1天前
|
设计模式 数据采集 监控
Spring日志框架
Spring日志框架
9 0
|
1天前
|
Java Spring
Spring文件配置以及获取
Spring文件配置以及获取
13 0
|
1天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。