【JavaEE进阶】SpringBoot 日志

这篇具有很好参考价值的文章主要介绍了【JavaEE进阶】SpringBoot 日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 日志有什么用?

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

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

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

Spring Boot中,可以通过使用日志框架来记录应用程序的日志。Spring Boot默认使用的是SLF4J(Simple Logging Facade for Java),并且集成了常用的日志实现框架,如LogbackLog4j2
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot

二. 自定义日志打印

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

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

1. 日志的使用与打印

  1. pom.xml中添加以下依赖:
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</dependency>
  1. 配置日志级别:在application.propertiesapplication.yml中配置日志级别。可以设置根级别日志以及特定类或包的日志级别。例如,要将根级别日志设置为info级别,可以在配置文件中添加以下配置:【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
  2. 记录日志:在代码中使用日志打印语句记录日志。Spring Boot通过@Autowired注解将日志对象注入到代码中,可以直接使用。例如,在一个Controller类中,可以这样使用日志:
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的包有很多,注意不要导错了.
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot

在网页中访问:http://localhost:8888/hello
结果如下:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
同时再控制台中我们可以看到以下日志信息:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
注意:Spring Boot还提供了一些特殊的日志记录器,如logging.filelogging.path等,用于指定日志文件的位置和名称。此外,还可以使用logging.pattern.consolelogging.pattern.file等属性来自定义控制台和文件日志的输出格式。

下来我们试一下不同日志级别的打印以及日志各部分详情介绍:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
那么就有小伙伴疑惑,为什么`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(致命):表示发生了无法恢复的严重错误,这通常会导致应用程序崩溃或无法继续执行。例如,关键依赖项启动失败、文件系统不可用等。

【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
级别越高,接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的日志了。
日志级别配置只需要在配置文件中设置“logging.level”配置项即可,如下所示:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot

此时就只打印error级别及以上的日志了:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
默认日志输出级别
清除掉配置⽂件中的日志设置,观察控制台输⼊的日志级别。
得到以下结论,日志的输出级别,默认是 info

四. 日志持久化

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

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

我们可以在E:\\JavaEE\\logger目录中看到以下文件:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
可以看到文件中记录了当前运行的日志信息:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot

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

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

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

1. Lombok的使用

添加Lombok依赖:

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
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 -----------------");
    }
}

运行结果:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot

2. lombok原理解释

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

【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
Java程序运行原理:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
Lombok的作用如下图所示:
【JavaEE进阶】SpringBoot 日志,JaveEE进阶,java-ee,spring,java,spring boot
Lombok的运行原理是通过注解处理器在编译时对源代码进行解析和转换,生成对应的代码片段,并将其插入到编译过程中的抽象语法树中,从而简化Java类的编写。这样可以减少开发者编写重复、繁琐的代码,提高开发效率。

2.1 Lombok更多注解说明

基本注解:

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

组合注解:文章来源地址https://www.toymoban.com/news/detail-658461.html

注解 作⽤
@Data @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor
@Slf4j 添加⼀个名为 log 的⽇志,使⽤ slf4j

到了这里,关于【JavaEE进阶】SpringBoot 日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaEE】SpringBoot的日志

    目录 日志作用 SpringBoot日志框架 日志打印 日志级别 类型 作用 修改级别 日志永久化 配置日志文件目录 配置日志文件名 简化日志打印和永久化——lombok 问题定位:可以帮助开发人员快速找到问题出现的位置 系统监控:可以把系统的运行情况、性能调优等信息记录下来,方

    2023年04月27日
    浏览(32)
  • 【JavaEE】Spring Boot - 日志文件

    【JavaEE】Spring Boot 开发要点总结(3) 写代码不是概率事件,bug的出现必然是有原因的,而日志的主要作用就是,排查和定位问题! 而日志的生成就是随着程序的进行和一步步生成的,不说全部过程都记录得清清楚楚,至少重要的点和环节或者一些异常情况都有记录 而通过日

    2024年02月14日
    浏览(50)
  • JAVAEE之Spring Boot日志

    ⽇志对我们来说并不陌生, 从JavaSE部分, 我们就在使用 System.out.print 来打印日志了. 通过打印日志来发现和定位问题, 或者根据日志来分析程序的运行过程. 在Spring的学习中, 也经常根据控制台的日志来分析和定位问题. 随着项⽬的复杂度提升, 我们对日志的打印也有了更高的需求

    2024年04月11日
    浏览(36)
  • 【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识

    JavaEE进阶首章 在之前的学习中,我们已经掌握了Servlet的框架去完成一个项目,而目前企业正在使用的技术则是我们接下来重点学习的! 本文章为 JavaEE进阶的第一篇文章,JavaEE进阶我们将学习: Spring全家桶 Spring / Spring Boot/ Spring MVC ,Spring Cloud为社招必须,校招不须 MyBatis

    2024年02月17日
    浏览(40)
  • 【JavaEE进阶】 Spring Boot⽇志

    在没有学习spring时,我们可能使⽤ System.out.print 来打印⽇志了.通过打印⽇志来发现和定位问题,或者根据⽇志来分析程序的运⾏过程. 在Spring的学习中,也经常根据控制台的⽇志来分析和定位问题.随着项⽬的复杂度提升,我们对⽇志的打印也有了更⾼的需求,⽽不仅仅是定位排查

    2024年01月24日
    浏览(51)
  • JavaEE进阶5/25(Spring 注解)

    1.五大类注解详解(重点 1.Controller 控制器,用于业务逻辑层,来控制用户的行为。它用来检查用户参数的有效性。 当用户的参数有效的话会继续分发到服务层。controller可以理解为程序的安保系统 2.Service 服务层。归属服务层,调用 持久化类 实现相应的功能。(服务层不直接

    2024年02月07日
    浏览(39)
  • 【JavaEE进阶】Spring 创建与使用

    使用Maven方式来创建一个Spring项目,创建Spring项目和Servlet类似,总共分为以下3步: 创建一个普通Maven项目 添加 Spring 框架⽀持(spring-context、spring-beans) 添加启动类 1.1,创建一个Maven项目 创建一个普通的Maven项目注意点:项目名称和项目路径中不能有任何中文。 当 Java源代码

    2024年02月13日
    浏览(73)
  • 【JavaEE进阶】SpringBoot 配置文件

    整个项目中所有重要的数据都是在配置⽂件中配置的,比如: 数据库的连接信息(包含⽤户名和密码的设置); 项⽬的启动端⼝; 第三⽅系统的调⽤秘钥等信息; ⽤于发现和定位问题的普通⽇志和异常⽇志等。 假如如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数

    2024年02月13日
    浏览(46)
  • JavaEE进阶 Spring AOP(6/1)

    目录 1.什么是AOP 2.Spring AOP可以干什么 3.AOP的组成成分 4.SpringAOP实现步骤 5.SpringAOP的原理 1.什么是AOP AOP是面向切面编程,是一种思想 Spring AOP是一种具体的技术 2.Spring AOP可以干什么 1.用户登录状态的判断 2.统一的日志记录(比如记录访问次数) 3.统一方法执行实践 3.AOP的组成

    2024年02月07日
    浏览(36)
  • 【JavaEE进阶】 Spring使用注解存储对象

    在博主前面所写的《【JavaEE进阶】 Spring 的创建和使⽤》中我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法。 在 Spring 中想要更简单的存

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包