日志门面与日志框架
数据库驱动
数据库驱动是不同数据库开发商(比如oracle mysql等)为了某一种开发语言环境(比如java)能够实现统一的数据库调用而开发的一个程序,他的作用相当于一个翻译人员,将Java语言中对数据库的调用语言通过这个翻译翻译成各个种类的数据库自己的数据库语言,当然这个翻译(数据库驱动)是由各个开发商针对统一的接口自定义开发的
JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序, (https://zhidao.baidu.com/question/689945946263537884.html)
jdbc与数据库驱动的关系类似于---日志门面(日志抽象层)和日志框架的关系,不管用什么日志框架,都使用同一个日志门面。日志框架都是实现的抽象层,程序员只要面向日志门面编程即可。
SLF4j使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class); // 参数表示要记录哪个类的信息
logger.info("Hello World");
}
}
统一日志记录
a(slf4j+logback)= Spring(commons-logging)+ Hibernate(jboss-logging)+ MyBatis、xxxx
a系统有本身的日志门面和日志框架,但是它依赖了其它框架技术,它们又有自己的日志门面和日志框架。
SpringBoot日志关系
查看依赖之间的关系:如图
底层依赖关系
@SuppressWarnings("rawtypes")
public abstract class LogFactory {
static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J ="http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
static LogFactory logFactory = new SLF4JLogFactory(); // 适配层偷梁换柱
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐core</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
日志使用
实践中出现如下问题
可以使用匿名内部类+lambda表达式简化变成过程 例如: logger.trace(()->"这是trace日志..."); 就能达到一样的效果不需要新建supplier类
@Test
void contextLoads() {
logger.trace(()->"trace");
}
Java 8 中我们可以通过 `::` 关键字来访问类的构造方法,对象方法,静态方法。
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test public void contextLoads() {
//日志的级别;
//由低到高 trace<debug<info<warn<error
//可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
logger.trace("这是trace日志...");
logger.debug("这是debug日志...");
//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root 级别 logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error日志...");
}
由低到高 trace<debug<info<warn<error ,
设置日志输出级别 (视频中针对特定的包设置日志级别的方法貌似不能用,以后再看)
logging:
level:
root: warn
效果