Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【JavaEE进阶】SpringBoot 日志

【JavaEE进阶】SpringBoot 日志

作者头像
xxxflower
发布于 2023-10-16 07:09:23
发布于 2023-10-16 07:09:23
31500
代码可运行
举报
文章被收录于专栏:《数据结构》《数据结构》
运行总次数:0
代码可运行

一. 日志有什么用?

Java中,日志是一种记录和追踪应用程序运行时信息的重要工具.以下是日志在Java中的几个主要用途:

  1. 调试和故障排查:通过输出详细的日志消息,可以帮助开发人员调试代码并解决问题。日志可以记录关键的变量值、函数调用堆栈等信息,从而更好地定位和修复 bug。
  2. 运行时监控:日志可以用于监控应用程序的运行情况,例如记录关键指标(如请求处理时间、数据库查询次数)以及异常情况。这些信息可以用来分析应用程序性能、发现潜在的瓶颈或异常行为,并进行相应的优化和调整。
  3. 安全审计和合规性:日志记录可以用于安全审计和合规性检查。通过记录关键事件和操作,可以提供追踪和审计的能力,了解系统的用户行为、权限变更等情况,以便跟踪不当行为或满足法规要求。
  4. 性能分析:通过分析应用程序的日志,可以评估其性能,并找出潜在的性能问题和瓶颈。通过记录请求响应时间、资源使用情况等数据,可以对应用程序的性能进行实时监测和优化。
  5. 记录用户登录日志,方便分析用户是正常登录还是恶意破解⽤户。记录系统的操作日志,方便数据恢复和定位操作⼈。记录程序的执行时间,方便为以后优化程序提供数据支持.

Java中有多种日志框架可供选择,如Log4jLogbackjava.util.logging等。这些日志框架提供了丰富的功能和配置选项,可以根据需求灵活地记录日志,并支持将日志输出到不同的目标(如控制台、文件、数据库等)。

Spring Boot中,可以通过使用日志框架来记录应用程序的日志。Spring Boot默认使用的是SLF4J(Simple Logging Facade for Java),并且集成了常用的日志实现框架,如LogbackLog4j2

二. 自定义日志打印

程序员自定义打印日志的实现步骤:

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

1. 日志的使用与打印

  1. pom.xml中添加以下依赖:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</dependency>
  1. 配置日志级别:在application.propertiesapplication.yml中配置日志级别。可以设置根级别日志以及特定类或包的日志级别。例如,要将根级别日志设置为info级别,可以在配置文件中添加以下配置:
  1. 记录日志:在代码中使用日志打印语句记录日志。Spring Boot通过@Autowired注解将日志对象注入到代码中,可以直接使用。例如,在一个Controller类中,可以这样使用日志:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
    private static final Logger logger = LoggerFactory.getLogger(MyController.class);//步骤一

    @RequestMapping("/hello")
    public String home() {
        logger.info("Hello, info!");//步骤二
        return "Welcome to my application!";
    }
}

注意此处导入的包是import org.slf4j.Logger;关于Logger的包有很多,注意不要导错了.

在网页中访问:http://localhost:8888/hello 结果如下:

同时再控制台中我们可以看到以下日志信息:

注意:Spring Boot还提供了一些特殊的日志记录器,如logging.filelogging.path等,用于指定日志文件的位置和名称。此外,还可以使用logging.pattern.consolelogging.pattern.file等属性来自定义控制台和文件日志的输出格式。

下来我们试一下不同日志级别的打印以及日志各部分详情介绍:

那么就有小伙伴疑惑,为什么`logger.trace(“Hello, trace!”); logger.debug(“Hello,debug!”);``这两行没有打印呢?这与日志的级别有关:

三. 日志级别

1. 日志级别有什么用?

日志级别用于控制日志输出的详细程度,可以根据需求选择合适的级别来记录和查看日志信息。通过设置适当的日志级别,可以灵活地控制日志的输出量和详细程度。在开发和调试阶段可以使用较低的日志级别(如DEBUG),以获得更多的信息帮助排查问题。而在生产环境中,可以将日志级别设置为较高的级别(如INFO或WARN),以减少日志输出并降低对性能的影响。 此外,日志级别还可以根据具体的应用程序需求进行扩展和自定义。例如,可以定义自己的日志级别来表示特定的业务场景或关键事件。

2. 日志级别的分类及使用

⽇志的级别分为:

  1. TRACE(追踪):最详细的日志级别,通常用于跟踪代码执行路径、变量状态等详细信息。在生产环境中很少使用,因为它会产生大量的日志输出。
  2. DEBUG(调试):用于开发和调试阶段,输出较为详细的日志信息,有助于理解代码的执行过程和检测问题。在生产环境中一般不建议使用,因为它会产生大量的日志输出。
  3. INFO(信息):用于输出重要的业务信息,如应用程序启动信息、关键操作完成信息等。通常会记录应用程序运行中的重要事件,可以用于监控和分析。
  4. WARN(警告):表示潜在的错误情况,可能会导致应用程序出现异常或不正常的行为,但不会造成严重的系统故障。例如,某些配置项未设置、数据库连接超时等。需要引起注意,但不会影响应用程序的正常运行。
  5. ERROR(错误):表示发生了可恢复的错误,导致应用程序无法正常执行某些功能或服务。例如,数据库连接失败、请求处理异常等。需要开发人员关注并及时处理。
  6. FATAL(致命):表示发生了无法恢复的严重错误,这通常会导致应用程序崩溃或无法继续执行。例如,关键依赖项启动失败、文件系统不可用等。

级别越高,接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的日志了。 日志级别配置只需要在配置文件中设置“logging.level”配置项即可,如下所示:

此时就只打印error级别及以上的日志了:

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

四. 日志持久化

上述日志都是输出在控制台上的,然而在生产环境上我们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化.以下是在Spring Boot中进行日志持久化的步骤:

  1. 添加依赖:在项目的pom.xml文件中添加日志框架的依赖。可以通过Spring Boot Starter依赖简化配置的过程,例如对于Logback,可以添加spring-boot-starter-logging依赖。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</dependency>
  1. 配置文件:在application.propertiesapplication.yml中进行相应的配置。具体配置方式取决于所选择的日志框架。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
logging:
  file:
#    设置日志文件的目录
    path: E:\\JavaEE\\logger
#    设置日志文件的名字
    name: E:\\JavaEE\\logger\\SpringBootDemoLog.log

我们可以在E:\\JavaEE\\logger目录中看到以下文件:

可以看到文件中记录了当前运行的日志信息:

五. 更简单的日志输出—Lombok

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

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

1. Lombok的使用

添加Lombok依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {
    @RequestMapping("/log")
    public void loggerTest() {
        log.error("------------------- error -----------------");
    }
}

运行结果:

2. lombok原理解释

lombok 能够打印⽇志的密码就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如下:

Java程序运行原理:

Lombok的作用如下图所示:

Lombok的运行原理是通过注解处理器在编译时对源代码进行解析和转换,生成对应的代码片段,并将其插入到编译过程中的抽象语法树中,从而简化Java类的编写。这样可以减少开发者编写重复、繁琐的代码,提高开发效率。

2.1 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第十节:SpringBoot中的日志管理
系列文章 第一节:创建SpringBoot项目并运行HelloWorld 第二节:SpingBoot单元测试 第三节:SpringBoot中web项目推荐目录结构 第四节:SpringBoot中web模版数据渲染展示 第五节:SpringBoot常用注解介绍 第六节:SpingBoot基本配置一 第七节:SpringBoot高级属性配置二 第八节:SpringBoot指定配置文件配置三 第九节:SpringBoot在线文档Swagger2入门 SpringBoot默认使用的日志框架是logback 。sp
入门笔记
2022/06/02
3580
第十节:SpringBoot中的日志管理
Java日志体系框架总结:JUL、JCL、SLF4J、Log4j、Logback、Log4j2
日志记录是应用程序运行中必不可少的一部分。具有良好格式和完备信息的日志,可以在程序出现问题时帮助开发人员迅速地定位错误的根源。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。
johnny666
2024/09/24
3000
使用Spring Boot日志框架在已有的微服务代码中添加日志功能
我们需要在已有的微服务代码中添加日志功能,用于输出需要关注的内容,这是最平常的技术需求了。由于我们的微服务代码是基于Spring Boot开发的,那么问题就转换为如何在Spring Boot应用程序中输出相应的日志。
博文视点Broadview
2020/06/11
5000
玩转springboot:日志的使用
以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4j的jar和 logback的实现jar就可以。
好好学java
2018/10/18
9780
Spring Boot 日志框架 整体介绍 及 使用
SpringBoot 默认继承了日志框架,如果需要更改日志框架,需要首先把原来的日志框架屏蔽后,再导入新的日志框架。 SpringBoot 的默认日志框架为 SLF4j 和 Logback,SLF4J作为日志接口层,Logback作为日志的实现层,
Freedom123
2024/03/29
1530
『互联网架构』软件架构-Spring boot集成日志框架(89)
在spring-boot-starter 依赖中,添加了 spring-boot-starter-logging依赖
IT架构圈
2019/06/25
4250
『互联网架构』软件架构-Spring boot集成日志框架(89)
SpringBoot整合日志框架
​ 1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件?
别团等shy哥发育
2023/02/25
7430
SpringBoot整合日志框架
第十节:SpringBoot中的日志管理
SpringBoot默认使用的日志框架是logback 。spring-boot-starter中包含了spring-boot-starter-logging模块。该日志框架就是logback。所以我们也不需要单独引入spring-boot-starter-logging模块。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId
入门笔记
2022/02/12
5620
第十节:SpringBoot中的日志管理
Spring boot集成日志框架
在spring-boot-starter 依赖中,添加了 spring-boot-starter-logging依赖
IT架构圈
2021/10/21
1.8K0
Spring boot集成日志框架
Springboot整合log4j2日志全解
上述介绍的是一些日志框架的实现,这里我们需要用日志门面来解决系统与日志实现框架的耦合性。SLF4J,即简单日志门面(Simple Logging Facade for Java),它不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志实现。
用户1212940
2020/07/10
5.7K0
Springboot整合log4j2日志全解
Spring Boot 2 集成log4j2日志框架
Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。而且日志处理中我们会用到kafka作为日志管道。而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 。
码农小胖哥
2019/12/05
7920
SpringBoot 笔记 ( 三 ):日志系统
SpringBoot 笔记 ( 三 ):日志系统 1、日志框架 日志框架就是防止我们再去像以前那样,一直进行System.out.println(“”)将关键数据打印在控制台。框架来记录系统的一些运行时信息,但是随着日志框架的增长,和接口的不一致,导致了使用上的差别很大,​这里采用了一个类似于数据库驱动的模式,数据库驱动是 Java 提供的一个 API,然后真正的实现是需要各个数据库厂商去完成的,而 log 也开始采用这种面向接口编程的方法采用日志抽象层。 市面上的日志框架 JUL、JCL、Jboss-l
lwen
2018/04/16
2.1K0
Springboot 系列(四)Spring Boot 日志框架
Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack。那我们在项目中该使用哪种日志框架呢?在对于不同的第三方 jar 使用了不同的日志框架的时候,我们该怎么处理呢?
未读代码
2019/11/04
4950
Springboot 2.x 使用 Log4j2 异步打印日志
目前常用的 Java 日志框架有 Log4j、Logback、Log4j2 ,性能方面推荐使用异步的 Log4j2,具体对比不多做分析,前人早已完成耕荒,我们就站在巨人的肩膀上来看看如何实操。
charmsongo
2020/12/31
2.4K0
Springboot 2.x 使用 Log4j2 异步打印日志
Spring Boot日志文件
前篇我们 讲完了SpringBoot的配置文件,讲解了为什么学配置文件&配置文件的作用,还有两种配置文件的格式与使用。这篇来讲SpringBoot 日志文件,下面我们一起进入SpringBoot 日志文件的世界!
终有救赎
2023/10/16
4460
Spring Boot日志文件
全面梳理 Spring Boot 日志体系
之前录过一个视频和大家分享 Spring Boot 日志问题,但是总感觉差点意思,因此松哥打算再通过一篇文章来和大家捋一捋 Java 中的日志问题,顺便我们把 Spring Boot 中的日志问题也说清楚。 1. Java 日志概览 说到 Java 日志,很多初学者可能都比较懵,因为这里涉及到太多东西了:Apache Commons Logging、Slf4j、Log4j、Log4j2、Logback、Java Util Logging 等等,这些框架各自有什么作用?他们之间有什么区别? 1.1 总体概览
江南一点雨
2022/05/12
5410
全面梳理 Spring Boot 日志体系
Spring学习笔记(十八)——spring日志框架的配置和使用
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....
不愿意做鱼的小鲸鱼
2022/09/26
1.9K0
SpringBoot之基本配置
市面上的日志框架:JUL、JCL、Jbooss-loggin、logback、log4j、log4j2、slf4j….
OY
2022/03/12
7990
SpringBoot之基本配置
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
Spring Boot默认使用SLF4J作为日志门面,并集成了Logback作为日志实现。SLF4J(Simple Logging Facade for Java)是一个通用的日志抽象层,可以与多种日志框架结合使用,如Logback、Log4j、Java Util Logging(JUL)等。Logback是一个快速、灵活且功能强大的日志框架,是Log4j的继任者。
IT_陈寒
2024/05/24
8600
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
SpringBoot 日志
市面上的日志框架: JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j ...
jwangkun
2021/12/23
2700
SpringBoot 日志
相关推荐
第十节:SpringBoot中的日志管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验