一、Spring Boot使用slf4j日志
在开发中经常使用 System.out.println()来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加资源的消耗。实际项目中使用的是 slf4j 的 logback 来输出日志,效率挺高的,Spring Boot 提供了一套日志系统,logback 是最优的选择。
控制台打印输出日志
System.out.println(需要输出的内容字符串)
一般在开发阶段需要输出的信息较多,作为产品部署后则输出信息较少,引入了一种常量的定义方式以控制是否输出日志
可以通过 Constants 接口中的常量定义是否需要输出,或者使用 int 型来控制不同的输出等级
外观模式:【应用场景、优缺点、编码】,提醒大家必须记忆设计模式中的 6 大原则
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。可以降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。属于 23 种设计模式中的结构型设计模式
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
编码实现:
1.产品接口
public interface Shape { public void draw();
}
2.具体实现
- 定义子系统的外观或者门面。该子系统中包括多个产品组件class ShapeFacade {
private Circle circle; private Square square; public ShapeFacade(){ circle=new Circle(); square=new Square();
}
public void drawCircle(){ circle.draw();
}
public void drawSquare(){ square.hashCode();
}
public void drawCircleAndSqure(){ circle.draw(); square.draw();
}
}
后记:事实上感觉笔记中提到的计算机案例似乎更能说明问题,建议参考感觉电脑的例子更形象:电脑整机是 CPU、内存、硬盘的外观。有了外观以后,启动电脑和关闭电脑都简化了。直接 new 一个电脑。在 new 电脑的同时把 cpu、内存、硬盘都初始化好并且接好线。对外暴露方法(启动电脑,关闭电脑)。
启动电脑(按一下电源键):启动 CPU、启动内存、启动硬盘关闭电脑(按一下电源键):关闭硬盘、关闭内存、关闭 CPU
1. slf4j 介绍
SLF4J 即简单日志门面,不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J 是一个用于日志系统的简单 Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
这里的意思是:只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输出的。因为它们取决于部署项目时绑定的日志系统。例如,在项目中使用了 slf4j 记录日志,并且绑定了 log4j,即导入相应的依赖,则日志会以 log4j 的风格输出;后期需要改为以 logback 的风格输出日志,只需要将 log4j 替换成 logback 即可,不用修改项目中的代码。这对于第三方组件的引入的不同日志系统来说几乎零学习成本,况且它的优点不仅仅这一个而已,还有简洁的占位符的使用和日志级别的判断。
2.slf4j-log4j 通过 slf4j 调用 log4j 的实现
1.添加依赖
2.在 resources 根目录下创建一个 log4j 的配置文件 log4j.properties
log4j.rootLogger=DEBUG, stdout 根日志记录器,参数 1 为需要输出的日志等级,参数 2 为日志输出的目标地名称 stuout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 设置 stdout 是控制台
输出
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 配置日志输出的
格式
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.编程中使用日志记录器输出用户自定义日志信息
4.Log4j 输出的目的地
org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
SpringBoot 输出日志 debug:
true 在 SpringBoot 框架启动时自动输出日志信息,同时显示相互之间的依赖关系。仅仅用于开发阶段,产品阶段一定关闭,或者删除该配置
正因为 sfl4j 有如此多的优点,阿里已经将 slf4j 作为他们的日志框架了。在《阿里 Java 开发手册(正式版)》中,日志规约一项第一条就强制要求使用 slf4j:
1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
强制两个字体现出了 slf4j 的优势,所以建议在实际项目中,使用 slf4j 作为自己的日志框架。使用 slf4j 记录日志非常简单,直接使用 LoggerFactory 创建即可。
目前 SpringBoot 针对日志系统默认采用 logback
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public class Test { private static final Logger logger = LoggerFactory.getLogger(Test.class);
// ……
}
5. application.yml 中对日志的配置
Spring Boot 对 slf4j 支持的很好,内部已经集成了 slf4j,一般在使用的时候,会对 slf4j 做一下配置。 application.yml 文件是 Spring Boot 中唯一需要配置的文件,一开始创建工程的时候是 application.properties 文件,一般推荐使用 yml 文件,因为 yml 文件的层次感特别好,看起来更直观,但是 yml 文件对格式要求比较高,比如英文冒号后面必须要有个空格,否则项目估计无法启动,而且也不报错。用 properties 还是 yml 视个人习惯而定,实际上都是可以的。 application.yml 文件中对日志的配置:
logging:
config: logback.xml
level: 针对不同的包可以设置不同的日志输出等级,基本格式为【包名称: 等级】