一、设计模式之门面模式(facade)
1. 概念:外部与子系统的通信,必须通过统一的外观对象(facade)进行,使得子系统更易于使用
2. 模式图
3. 核心点:
a. 知道所有子角色的功能和责任
b. 将客户端发来的请求,委派到子系统中,门面对象没有实际的业务逻辑
c. 不参与子系统内业务逻辑的实现
二、slf4j概述
1. slf4j是门面模式的典型应用,因为一个系统中可能有其他jar包,使用了logback, log4j, slf4j等不同的日志系统,需要引入一个适配层去决定使用哪种日志系统
2. slf4j只是一个日志标准,并不是日志系统的具体实现:提供日志接口、提供获取具体日志对象的方法
3. slf4j的具体实现:slf4j-simple, logback, slf4j-log4j12
三、应用:使用slf4j+logback
1. 添加依赖
//slf4j
org.slf4j
slf4j-api
1.7.25
//logback实现slf4j
ch.qos.logback
logback-classic
1.2.3
2. 添加logback配置文件,可以指定控制台和文件进行日志输出
${COMMON_PATTERN}
logs/myproject.log
${COMMON_PATTERN}
logs/myproject.%d{yyyy-MM-dd}.log.zip
7
true
logs/error.log
${COMMON_PATTERN}
logs/error.%d{yyyy-MM-dd}.log.zip
7
true
ERROR
512
3. 在代码中使用
Logger logger = LoggerFactory.getLogger(Object.class);
logger.info("info");
logger.warn("warn");
四、slf4j实现原理
1. Logger logger = LoggerFactory.getLogger(Object.class); 根据日志工厂获得具体的日志类
2.getLogger的时候会去classpath下找STATIC_LOGGER_BINDER_PATH,即”org/slf4j/impl/StaticLoggerBinder.class”,每一个日志实现的jar包里都有这个类
3. 存在多个日志实现,会有警告产生,并选择其中一个实现