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 小时前
Maven
java·log4j·maven
FreeBuf_2 小时前
攻击者伪造Jackson JSON库入侵Maven中央仓库
java·json·maven
xun-ming2 小时前
JVM实战中5个核心概念
java
风筝在晴天搁浅2 小时前
hot100 146.LRU缓存
java·缓存
liliangcsdn2 小时前
MySQL存储字节类数据的方案示例
java·前端·数据库
lbb 小魔仙2 小时前
【Java】Spring Cloud 核心组件详解:Eureka、Ribbon、Feign 与 Hystrix
java·spring cloud·eureka
予枫的编程笔记2 小时前
从入门到精通:RabbitMQ全面解析与实战指南
java·开发语言·后端·rabbitmq·ruby
superman超哥2 小时前
Rust 异步性能最佳实践:高并发场景的极致优化
开发语言·后端·rust·最佳实践·异步性能·高并发场景