为什么要学习日志
System.out.print
来打印?志了System.out.print
不能很好的满?我们的需求, 我们就需要使??些专??志框架(专业的事情交给专业的?去做).日志的用途
通过前?的学习, 我们知道?志主要是为了发现问题, 分析问题, 定位问题的, 但除此之外, ?志还有很多?途
Spring Boot 项?在启动的时候默认就有?志输出,如下图所?:
SpringBoot 内置了?志框架 Slf4j , 我们可以直接在程序中调? Slf4j 来输出?志
打印?志的步骤:
在程序中获取?志对象需要使??志?? LoggerFactory,如下代码所?:
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
LoggerFactory.getLogger 需要传递?个参数, 标识这个?志的名称. 这样可以更清晰的知道是哪个类输出的?志. 当有问题时, 可以更?便直观的定位到问题类
注意:Logger 对象是属于 org.slf4j 包下的, 不要导?错包.
?志对象的打印?法有很多种,我们可以先使? info() ?法来输出?志,如下代码所?:
SLF4J是??模式的典型应?(但不仅仅使?了??模式).
??模式定义
门面模式又称为外观模式, 提供了一个统一接口, 用来访问子系统中的一群接口, 其主要特征是定义了一个高层接口, 让子系统更容易使用.
??模式主要包含2种??:
??模式的实现
场景: 回家, 我们会开各个屋的灯. 离开家时, 会关闭各个屋的灯
如果家?设置?个总开关, 来控制整个屋的灯就会很?便
我们使???模式的实现
??模式的优点
SLF4J 就是其他?志框架的??. SLF4J 可以理解为是提供?志服务的统?API接?, 并不涉及到具体的?志逻辑实现.
不引??志??
引??志??
总的来说,SLF4J使你的代码独?于任意?个特定的?志API,这是?个对于开发API的开发者很好的思想.
从上图可以看到,?志输出内容元素具体如下:
?志级别代表着?志信息对应问题的严重性, 为了更快的筛选符合?标的?志信息.
?志的级别从?到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE
?志级别是开发?员??设置的. 开发?员根据??的理解来判断该信息的重要程度
SpringBoot 默认的?志框架是Logback, Logback没有 FATAL 级别, 它被映射到 ERROR .
出现fatal?志,表?服务已经出现了某种程度的不可?, 需要需要系统管理员紧急介?处理. 通常情况下, ?个进程?命周期中应该最多只有?次FATAL记录.
观察打印的?志结果:
结果发现, 只打印了info, warn和error级别的?志
这与?志级别的配置有关, ?志的输出级别默认是 info级别, 所以只会打印?于等于此级别的?志, 也就是info, warn和error.
上述是?志的使?, ?志框架?持我们更灵活的输出?志, 包括内容, 格式等.
?志级别配置只需要在配置?件中设置"logging.level"配置项即可,如下所?:
以上的?志都是输出在控制台上的, 然?在线上环境中, 我们需要把?志保存下来, 以便出现问题之后追溯问题. 把?志保存下来就叫持久化.
?志持久化有两种?式
配置?志?件的路径和?件名:
后?可以跟绝对路径或者相对路径
运?结果显?, ?志内容保存在了对应的?录下
注意:
logging.file.name
和 logging.file.path
两个都配置的情况下, 只?效其?, 以
logging.file.name
为准.
如果我们的?志都放在?个?件中, 随着项?的运?, ?志?件会越来越?, 需要对?志?件进?分割.
当然, ?志框架也帮我们考虑到了这?点, 所以如果不进?配置, 就??动配置
默认?志?件超过10M就进?分割
配置?志?件分割:
- ?志?件超过1KB就分割(设置1KB是为了更好展?. 企业开发通常设置为200M, 500M等, 此处没有明确标准)
- 分割后的?志?件名为: ?志名.?期.索引
项?运?, 多打印?些?志, ?志分割结果:
?前?志打印的格式是默认的
每次都使? LoggerFactory.getLogger(xxx.class) 很繁琐, 且每个类都添加?遍, lombok给我们提供了?种更简单的?式.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>