Spring日志

日志是啥?

日志,我们打印出来的东西,或者程序自动打印出来的东西就叫做日志

有啥用?

日志,可以让我们快速定位到问题,知道哪里报错,哪里出现问题,也可以用来数据采集

日志的使用

程序一启动,就会打印日志,这里的日志,很明显和我们自己打印的日志是不一样的,很明显,日志打印出来的东西更加全面

日志的格式

时间,级别,进程的ID,应用名称,线程名称,类路径,日志内容

如何实现这种日志

使用springboot内置的框架slf4j

Logger这个类是内置在slf4j这个包之内的,获取日志对象是通过日志工厂获取的,需要传入一个参数,也就是这个日志的名称,一般我们使用这个类的名字

日志框架

Slf4j并不是并不是真的一个日志实现框架,他是把所有的日志实现整合一个统一的接口,无法单独使用,需要和具体的日志框架结合使用

门面模式/外观模式

说人话就是,门面系统提供了一个统一的接口,可以用来访问子系统的一群接口

举例子

假设你现在要关灯,你可以选择一个个灯去关掉,或者直接就关掉总开关

优点:解耦,减少依赖

灵活,不需要关系子系统是怎么实现的,只需要知道怎么交互就行

安全,子系统不给你提供接口,你就只能访问子系统提供的接口

为什么要引入日志门面?

因为日志门面实现了统一的接口,只需要维护这一个即可,之前的日志框架底层可能存在冲突,比如jar包不同,就会导致程序出错

日志的级别

默认的打印级别为info级别

从这里可以看出来,fatal是没有提供方法的,因为使用fatal就说明挂了都,然后debug和trace无法打印出来,这个是因为默认的打印级别是info,可以在配置文件修改

修改默认日志级别

在yml配置文件中是这logging.level.root即可

日志持久化

每次程序启动或者程序结束,就会清除掉日志,为了把日志保存下来,我们可以存储日志

语法

Logging.file.name

Logging.file.path

Name

不指定盘符,就会默认在当前文件所在的位置创建一个文件,名字自己指定,指定盘符和名字就会按照你的定义来

Path

只能指定存储的位置,无法指定名称,名称固定是spring.log

优先级

如果同时存在name和path,就会以name为主,path报废

Path和name的区别

Name可以指定名字和路径,优先级更高

Path只能指定路径,名字默认是spring.log

日志的分割

只要项目运行的够久,name日志就会很大,我们如果需要其中的某些日志,不可能在一个超级大的文件中找,不亚于大海捞针,所以我们就需要对日志进行分割

语法

Max-file-size,最大的日志大小

File-name-pattern文件的命名规则:日志名,日期,索引

按照自己的需求,可以对日志进行分割,需要注意这里的最大日志不是准确数,是按行数来的,会把这一行打印完才会结束

配置日志的格式

自带我感觉还挺好看的,我不推荐换

语法

控制台和文件

%d表示日期格式,c是类的全限定名,M是方法名字L是行号thread是线程的名字

使用注解输出日志

@slf4j

前提是需要导入了lombok依赖

使用slf4j就会帮我们默认生成一个

private static final Logger logger = LoggerFactory.getLogger(类名);

设置控制台颜色

打开edit configuration

打开motify

然后点击vm接着在窗口输入

-Dspring.output.ansi.enabled=ALWAYS

重启即可

相关推荐
LucianaiB1 小时前
别再被 AI 骗了:我把腾讯云 4 个 Skill 做成了个「AI 打假侦探」,过程的一个小配置坑惨了我
后端
mldong2 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
candyTong2 小时前
Claude Code 如何恢复一段会话
后端·架构·ai编程
风流 少年3 小时前
Spring AI 2.0:Advisor
android·人工智能·spring
mqiqe3 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一513 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
gugucoding3 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
En^_^Joy3 小时前
Django项目配置全攻略:settings配置文件
后端·python·django
砍材农夫3 小时前
spring-ai|Spring‑AI 2.0.0 新特性 + 入门教程
spring boot·spring·spring cloud
Nebula_g3 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法