首页 > 其他分享 >SpringBoot 日志

SpringBoot 日志

时间:2024-07-25 19:25:29浏览次数:12  
标签:打印 logging SpringBoot 配置 file 日志 级别

目录

一、日志概述

二、日志使用

2.1 打印日志

2.2 日志格式

2.3 日志级别

2.4 日志配置

2.4.1 日志级别

2.4.2 日志持久化

2.4.3 日志文件分割

2.4.4 配置日志格式

三、更简单的日志输出

3.1 添加 lombok 依赖

3.2 输出日志


一、日志概述

在SpringBoot项目启动后,项目本身就有默认的日志输出,即:

那么如何自己打印如上的日志呢?

二、日志使用

 SpringBoot 内置了日志框架 Slf4j,可以直接在程序中调用 Slf4j 来输出日志。

2.1 打印日志

打印日志的步骤:
  1. 在程序中得到日志对象;
  2. 使用日志对象输出要打印的内容。

在程序中获取日志对象需要使用日志工厂LoggerFactory,如下代码所示:

private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
Logger 对象是属于 org.slf4j 包下的,不要导入错包。
日志对象的打印方法有很多种,先使用 info() 方法来输出日志,如下代码所示:
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 LoggerController {
 private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

 @PostConstruct
 public String logger(){
      logger.info("info 日志");
       return "打印日志";
 }
}

2.2 日志格式

 从上图可以看到,日志输出内容元素具体如下:

①. 时间日期:精确到毫秒

②. 日志级别:ERROR, WARN, INFO, DEBUG 或TRACE

③. 进程ID

④. 线程名

⑤. Logger名(通常使用源代码的类名)

⑥. 日志内容

2.3 日志级别

日志的级别从高到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE。级别越高, 收到的消息越少。
  • FATAL: 致命信息,表示需要立即被处理的系统级错误。
  • ERROR: 错误信息, 级别较高的错误日志信息, 但仍然不影响系统的继续运行。
  • WARN: 警告信息, 不影响使用, 但需要注意的问题。
  • INFO: 普通信息, 用于记录应用程序正常运行时的一些信息, 例如系统启动完成、请求处理完成等。
  • DEBUG: 调试信息, 需要调试时候的关键信息打印。
  • TRACE: 追踪信息, 比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使同DEBUG级别替代)。

那么可以通过以下代码实现不同级别的日志打印:

/**
 * 打印不同级别的⽇志
 * @return
 */
@PostConstruct
public String printLog() {
 logger.trace("================= trace ===============");
 logger.debug("================= debug ===============");
 logger.info("================= info ===============");
 logger.warn("================= warn ===============");
 logger.error("================= error ===============");
 return "打印不同级别的⽇志" ;
}

结果发现, 只打印了info, warn和error级别的日志,这与日志级别的配置有关, 日志的输出级别默认是 info级别, 所以只会打印大于等于此级别的日志, 也就是info, warn和error。

2.4 日志配置

2.4.1 日志级别

日志级别配置只需要在配置文件中设置"logging.level"配置项即可。 在properties文件中:
logging.level.root=debug

在yml文件中:

logging:
 level:
  root: debug

配置完成之后,重新启动项目,运行上面代码,可发现:

2.4.2 日志持久化

以上的日志都是输出在控制台上的,然而在线上环境中需要把日志保存下来, 以便出现问题之后追溯问题。把日志保存下来就叫持久化。 日志持久化有两种方式:
  • 配置日志文件名
  • 配置日志的存储目录
1. 配置日志文件的路径和文件名: properties配置 :
logging.file.name=springboot.log
yml配置 :
# 设置⽇志⽂件的⽂件名
logging: 
 file: 
  name: springboot.log

启动项目刷新之后会显示:

2. 配置日志文件的保存路径

properties配置
logging.file.path=D:/temp

yml配置:

# 设置⽇志⽂件的⽬录
logging:
 file:
  path: D:/temp

启动项目刷新之后会显示:


这种方式只能设置日志的路径, 文件名为固定的spring.log。

logging.file.name 和 logging.file.path 两个都配置的情况下, 只生效其一, 以 logging.file.name 为准。

2.4.3 日志文件分割

如果我们的日志都放在一个文件中, 随着项目的运行, 日志文件会越来越大, 需要对日志文件进行分割。 默认日志文件超过10M就进行分割。
配置项说明默认值
http://logging.logback.rollingpolicy.file-name-pattern日志分割后的文件名格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
http://logging.logback.rollingpolicy.max-file-size 日志文件超过这个大小就自动分割 10MB
配置日志文件分割: properties配置 :
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i
logging.logback.rollingpolicy.max-file-size=1KB
yml配置 :
logging:
 logback:
  rollingpolicy:
   max-file-size: 1KB
   file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

日志文件超过1KB就分割,分割后的日志文件名为:日志名.日期.索引

项目运行, 多打印一些日志, 日志分割结果:

2.4.4 配置日志格式

目前日志打印的格式是默认的,打印日志的格式, 也是支持配置的,支持控制台和日志文件分别设置。
配置项说明默认值
http://logging.pattern.console控制台日志格式 %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:- %5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]) {faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
http://logging.pattern.file 日志文件 的日志格 式 %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
配置项说明:
  1. %clr(表达式){颜色} 设置输入日志的颜色,支持颜色有:blue、cyan、faint、green、magenta 、red、yellow
  2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} 日期和时间--精确到毫秒
  3. %5p 显示日志级别ERROR,MARN,INFO,DEBUG,TRACE.
  4. %t 线程名,%c 类的全限定名,%M method,%L 为行号,%thread 线程名称,%m 或者 %msg 显示输出消息,%n 换行符
  5.  %5 若字符长度小于5,则右边用空格填充,%-5 若字符长度小于5,则左边用空格填充. %.15 若字符长度超过15,截去多余字符,%15.15 若字符长度小于15,则右边用空格填充。 若字符长度超过15,截去多余字。
如果设置了颜色,但是没有生效,那么就需要配置。以下步骤进行配置即可: ”-Dspring.output.ansi.enabled=ALWAYS“ 重新启动程序便可解决问题。 properties配置:
logging.pattern.console='%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n‘

yml配置:

logging:
 pattern:
  console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
  file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

三、更简单的日志输出

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,,且每个类都添加一遍, lombok提供了一种更简单的方式。
  1.  添加 lombok 框架支持
  2. 使用 @slf4j 注解输出日志

3.1 添加 lombok 依赖

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

3.2 输出日志

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
 
 @PostConstruct
 public void log(){
 log.info("--------------要输出⽇志的内容----------------");
 }
}
运行结果如下:

标签:打印,logging,SpringBoot,配置,file,日志,级别
From: https://blog.csdn.net/m0_60462557/article/details/140692200

相关文章

  • SpringBoot 依赖之Java Mail Sender邮件发送
    JavaMailSender依赖名称:JavaMailSender功能描述:SendemailusingJavaMailandSpringFramework’sJavaMailSender.使用JavaMail和SpringFramework的JavaMailSender发送电子邮件。<dependency> <groupId>org.springframework.boot</groupId> <artifa......
  • 如何在 python 日志记录中插入换行符?
    importlogginglogging.basicConfig(level=logging.DEBUG,format='%(asctime)s%(levelname)s%(message)s',datefmt='%H:%M:%S')logging.info('hello')logging.warning('\nnewhello')11:15:01INFOhello11:16......
  • SpringBoot 结合官网对MQTT消息队列整合记录
    SpringBoot结合官网对MQTT消息队列整合首先是mavenPom的引入MqttClient<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.......
  • 一个简单的水泵日志匹配项目
    项目名称水泵智慧统计软件项目简介本项目是针对某单位水泵运行日志进行分析,具有智能统计水泵单次运行时长,固定日期内运行次数,及水泵异常信息的功能。安装说明双击Qdmetro水泵智慧统计软件.exe使用使用说明选择线路操作:确保你正在处理的数据与对应的线路相匹配。如果......
  • SpringBootApplication入口调用service类方法
    要在publicstaticvoidmain(String[]args)中调用Service的方法,需要在Application类中手动获取Spring容器,并从中获取Service的实例。示例如下:启动入口程序@SpringBootApplicationpublicclassRouteApplication{publicstaticvoidmain(String[]args){......
  • SpringBoot3.x整合Druid数据库连接池
    引入依赖<!--Druid数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.21</version></dependency......
  • springboot+vue前后端分离项目:导出功能报错Request processing failed: cn.hutool.cor
    1.报错截图: 2.hutool官网,推荐引入poi-ooxml依赖 3.mvn仓库找到依赖 4.用最新版依赖 5.复制到本项目pom.xml,刷新maven 解决......
  • Asp.Net Core Serilog日志自定义Sink
    项目的日志框架使用了Serilog,现在有需求要将异常日志记录一份到数据库中。目前网上可以找到适配各个数据库的Sink。https://github.com/serilog/serilog/wiki/Provided-Sinks但是由于项目需要适配多个不同类型的数据库,故打算自定义一个DatabaseSink,使用SqlSugar进行数据库操作。......
  • Qt/C++使用小记7【qt单例模式-写日志/保存运行记录】
    小收获7众所周知,有时候需要记录行为操作,或者记录数据进行对比,甚至有的时候需要记录软件内的数据,来确认错误的地方或者验证数据的准确性,那么该如何进行呢这里我所使用的是使用“单例模式”来进行记录的,所以这个收获说是记录写日志,不如说是记录单例模式的使用~什么是单例模式?......
  • springboot自学(2)Bean的加载控制
    Bean的加载控制Bean的加载控制指根据特定情况对bean进行选择性加载以达到适用于项目的目标。那么哪些加载方式适用于编程的形式加载控制呢    控制的演示  注解形式控制bean加载使用@conditional注解的派生注解设置各种组合条件控制bean的加载 有诸多......