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

重启即可

相关推荐
雨中飘荡的记忆2 小时前
深度详解Spring Context
java·spring
Tao____2 小时前
JAVA开源物联网平台
java·物联网·mqtt·开源·ruoyi
yqd6662 小时前
SpringSecurity的使用
java·spring
仙俊红2 小时前
Java Map 家族核心解析
java·开发语言
一嘴一个橘子3 小时前
springMvc 接收参数、cookie、header
java
code_li3 小时前
聊聊支付宝架构
java·开发语言·架构
CC.GG4 小时前
【Linux】进程概念(五)(虚拟地址空间----建立宏观认知)
java·linux·运维
以太浮标5 小时前
华为eNSP模拟器综合实验之- AC+AP无线网络调优与高密场景
java·服务器·华为
Mr__Miss5 小时前
JAVA面试-框架篇
java·spring·面试
小马爱打代码5 小时前
SpringBoot:封装 starter
java·spring boot·后端