网站友情链接代码,大连网站建设特色,国学大师网站是哪里做的,网站排名对比1. 日志的介绍
在前面的学习中#xff0c;控制台上打印出来的一大堆内容就是日志#xff0c;可以帮助我们发现问题#xff0c;分析问题#xff0c;定位问题#xff0c;除此之外#xff0c;日志还可以进行系统的监控#xff0c;数据采集等 2. 日志的使用
在程序中获取日…1. 日志的介绍
在前面的学习中控制台上打印出来的一大堆内容就是日志可以帮助我们发现问题分析问题定位问题除此之外日志还可以进行系统的监控数据采集等 2. 日志的使用
在程序中获取日志对象需要使用日志工厂 LoggerFactory然后调用 getLogger 方法传入参数用来标识这个日志的名称这样可以更清晰的知道是哪个类输出的日志
private static Logger logger LoggerFactory.getLogger(CaptchaController.class); System.out.println(System code);
logger.info(Logger: code); 来看一下日志的格式 应用名称可以在配置文件中进行配置
3. 日志框架的介绍
日志门面就相当于是淘宝 APP日志实现相当于入驻的商家在使用时是使用淘宝真正提供商品的还是商家
也就是使用时使用 SLF4J真正实现功能还是日志实现的框架 3.1. SLF4J 框架的介绍
SLF4J 就是其他日志框架的门面相当于提供日志服务的统一 API 接口并不涉及到具体的日志逻辑实现而是一个抽象层对日志框架制定的一种规范、标准、接口。所有 SLF4J 并不能独立使用需要和具体的日志框架配合使用。
如果说不引入 SLF4J 的话
不同的日志框架的 API 接口和配置文件不同如果多个日志框架共存那么就需要维护多套配置文件如果要更换日志框架修改应用程序代码的过程中可能会出现一些代码冲突如果引入了多套第三方框架也是需要维护这些配置的
引入门面日志框架之后应用程序和日志框架之间有了统一的 API 接口此时应用程序只需要维护一套日志文件配置即可当底层实现框架改变时也不需要修改应用程序代码
3.2. 外观模式
外观模式门面模式提供了一个统一的接口用来访问子系统中的其他接口 SLF4J 就是外观模式的典型应用但不仅仅使用了这一种设计模式
接下来以开灯的例子简单实现一下外观模式
首先定义一个接口
public interface Light {void on();void off();
}
然后定义两个实现类
public class LivingRoomLight implements Light{private static Logger logger LoggerFactory.getLogger(LivingRoomLight.class);Overridepublic void on() {logger.info(打开客厅灯);}Overridepublic void off() {logger.info(打开客厅灯);}
}
public class BedroomLight implements Light{private static Logger logger LoggerFactory.getLogger(BedroomLight.class);Overridepublic void on() {logger.info(打开卧室灯);}Overridepublic void off() {logger.info(打开卧室灯);}
}
如果说是之前的实现模式的话需要在 Main 方法中去分别创建这两个类的对象然后调用方法通过外观模式的话可以创建一个类用来实现之前的过程
public class LightFacade {void lightOn(){LivingRoomLight livingRoomLight new LivingRoomLight();livingRoomLight.on();BedroomLight bedroomLight new BedroomLight();bedroomLight.on();}
}
这样即使实现类的方法发生改变提供给用户使用的接口还是不变的用户就不用考虑内部是怎么实现的
4. 日志的级别
4.1. 级别的分类
日志的级别从高到低依次为FATAL、ERROR、WARN、INFO、DEBUG、TRACE。
FATAL致命信息表示需要立即被处理的系统级错误。ERROR错误信息级别较高的错误日志信息但仍然不影响系统的继续运行。WARN警告信息不影响使用但需要注意的问题。INFO普通信息用于记录应用程序正常运行时的一些信息例如系统启动完成、请求处理完成等。DEBUG调试信息需要调试时候的关键信息打印。TRACE追踪信息比 DEBUG 更细粒度的信息事件除非有特殊用意否则请使用 DEBUG 级别替代 4.2. 级别的使用
创建 Logger 之后就可以调用方法区打印不同级别的日志但是发现没有 fatal 级别的信息因为出现这个问题已经很严重了不用通过日志就可以知道出现问题了 运行之后发现 debug 级别和 trace 级别的日志没有打印出来这是因为默认配置的日志级别是 info 级别的所以比 info 级别低的就打印不出来 5. 日志的配置
5.1. 配置日志级别
可以通过配置日志级别来设置 配置之后就可以看到级别低的日志了 也可以分类配置日志的级别指定某个类的日志级别显示
logging:level:root: infocom:example:log:controller: trace
5.2. 日志持久化
在上面打印的日志中如果把 idea 关了那么之前打印的日志就没有了如果说日志可以存储到文件中也就是存储在硬盘上就可以做到持久化这样出现问题就可以查之前的日志
还是可以通过配置来实现日志的持久化
第一种方式是通过配置文件名的方式 配置之后再运行的话就会创建配置的文件夹和文件名并且日志也存储在了文件中 还有一种方式是只设置路径 配置之后就会在设置的目录下创建一个 spring.log 文件夹里面存储的就是日志信息 5.3. 配置日志文件的分割
如果说所有日志都放在同一个文件中那么这个文件肯定是越来越大的就需要对日志文件进行分割日志框架默认也设置了如果超过 10 M 就会分割 先来设置为 1KB 进行分割 分割之后的文件名也是可以指定的
logback:rollingpolicy:max-file-size: 1KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
5.4. 配置日志格式
日志的格式也是可以控制的 % clr (表达式){颜色} 设置输入日志的颜色。% d {${LOG_DATEFORMAT_PATTERN:-yyyy-MM-ddTHH:mm:ss.SSSXXX}} 日期和时间 -- 精确到毫秒。%5p 显示日志级别 ERRORWARNINFODEBUGTRACE。% t 线程名。% c 类的全限定名。% M method。% L 为行号。% thread 线程名称。% m 或者 % msg 显示输出消息。% n 换行符。%5 若字符长度小于 5则右边用空格填充。%-5 若字符长度小于 5则左边用空格填充。%.15 若字符长度超过 15截去多余字符。%15.15 若字符长度小于 15则右边用空格填充。若字符长度超过 15截去多余字符。
pattern:console: %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%nfile: %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n
6. lombok 简化日志输出
直接使用注解Slf4j然后就不用再创建 Logger 的对象了直接就可以调用方法 主页