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

重启即可

相关推荐
葫芦和十三3 小时前
图解 MongoDB 21|选举与 failover:Primary 是怎么选出来的
后端·mongodb·agent
GetcharZp3 小时前
26k Star 开源内网穿透神器 NetBird,一分钟实现全球设备互联!
后端
考虑考虑4 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯4 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
lizhongxuan7 小时前
多Agent之间的区别
后端
青石路8 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
杨充9 小时前
1.面向对象设计思想
后端
IT_陈寒9 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
systemPro10 小时前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗10 小时前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端