当前位置: 首页 > news >正文

SpringBoot 日志

目录

一、日志概述

二、日志使用

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);@PostConstructpublic 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: 1KBfile-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 {@PostConstructpublic void log(){log.info("--------------要输出⽇志的内容----------------");}
}
运行结果如下:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C:图案打印
  • C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序
  • Android串口开发及读取完整数据的解决方法
  • Vite项目中根据不同打包命令配置不同的后端接口地址,proxy解决跨域
  • Linux中的文件操作
  • 学习java的设计模式
  • XPathParser类
  • 【React】详解如何获取 DOM 元素
  • 【图解网络】学习记录
  • 每日OJ_牛客CM26 二进制插入
  • 【模型】LightGBM
  • OCC BRepOffsetAPI_ThruSections使用
  • UVM_ERROR: SEQREQZMB解决方案
  • <设计模式> 工厂模式
  • 【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
  • css布局,左右固定中间自适应实现
  • eclipse(luna)创建web工程
  • HTTP--网络协议分层,http历史(二)
  • JavaScript HTML DOM
  • SSH 免密登录
  • Theano - 导数
  • 基于web的全景—— Pannellum小试
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何编写一个可升级的智能合约
  • 如何用vue打造一个移动端音乐播放器
  • 温故知新之javascript面向对象
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 选择阿里云数据库HBase版十大理由
  • ​如何使用QGIS制作三维建筑
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #nginx配置案例
  • (003)SlickEdit Unity的补全
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .java 9 找不到符号_java找不到符号
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net反编译工具
  • .Net接口调试与案例
  • .net下简单快捷的数值高低位切换
  • 。Net下Windows服务程序开发疑惑
  • @ConfigurationProperties注解对数据的自动封装
  • [ C++ ] STL---string类的模拟实现
  • [100天算法】-不同路径 III(day 73)
  • [20161214]如何确定dbid.txt
  • [20190401]关于semtimedop函数调用.txt
  • [51nod1610]路径计数
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [bzoj4240] 有趣的家庭菜园
  • [BZOJ4566][HAOI2016]找相同字符(SAM)