今天读了一下dubbo的源码,dubbo源码本身主要包括以下几个部分(包):common、config、container、monitor、registry、remoting、rpc,其中今天要说的日志适配器模式就在common包中。
首先我们来看日志的调用方式如下:
public class DubboRegistry extends FailbackRegistry { private final static Logger logger = LoggerFactory.getLogger(DubboRegistry.class); // doSomethings }
LoggerFactory是dubbo自己封装好的可以适配很多种日志组件的工厂,下面来看下dubbo是怎么在日志服务方面使用适配器模式,可以让很多日志组件适用于dubbo:
1、在Factory中通过static静态代码块的方式,从dubbo的配置文件中读取dubbo要使用的日志组件,Factory中有LoggerAdapter对象存放对应日志的适配器,判断读取的日志后,new相应的适配器赋值给LoggerAdapter对象,如下:
/** * 日志输出器工厂 * * @author william.liangf */ public class LoggerFactory { private LoggerFactory() { } private static volatile LoggerAdapter LOGGER_ADAPTER; private static final ConcurrentMap<String, FailsafeLogger> LOGGERS = new ConcurrentHashMap<String, FailsafeLogger>(); // 查找常用的日志框架 static { String logger = System.getProperty("dubbo.application.logger"); if ("slf4j".equals(logger)) { setLoggerAdapter(new Slf4jLoggerAdapter()); } else if ("jcl".equals(logger)) { setLoggerAdapter(new JclLoggerAdapter()); } else if ("log4j".equals(logger)) { setLoggerAdapter(new Log4jLoggerAdapter()); } else if ("jdk".equals(logger)) { setLoggerAdapter(new JdkLoggerAdapter()); } else { try { setLoggerAdapter(new Log4jLoggerAdapter()); } catch (Throwable e1) { try { setLoggerAdapter(new Slf4jLoggerAdapter()); } catch (Throwable e2) { try { setLoggerAdapter(new JclLoggerAdapter()); } catch (Throwable e3) { setLoggerAdapter(new JdkLoggerAdapter()); } } } } } }
2、每一个日志的适配器类都实现了LoggerAdapter接口,该接口定义如下:
/** * 日志输出器供给器 * * @author william.liangf */ @SPI public interface LoggerAdapter { /** * 获取日志输出器 * * @param key 分类键 * @return 日志输出器, 后验条件: 不返回null. */ Logger getLogger(Class<?> key); /** * 获取日志输出器 * * @param key 分类键 * @return 日志输出器, 后验条件: 不返回null. */ Logger getLogger(String key); /** * 设置输出等级 * * @param level 输出等级 */ void setLevel(Level level); /** * 获取当前日志等级 * * @return 当前日志等级 */ Level getLevel(); /** * 获取当前日志文件 * * @return 当前日志文件 */ File getFile(); /** * 设置输出日志文件 * * @param file 输出日志文件 */ void setFile(File file); }
3、相应的具体日志适配器实现该接口,实现具体的LoggerAdapter中定义的方法,比如核心的getLogger等,如下图:
public class Slf4jLoggerAdapter implements LoggerAdapter { public Logger getLogger(String key) { return new Slf4jLogger(org.slf4j.LoggerFactory.getLogger(key)); } public Logger getLogger(Class<?> key) { return new Slf4jLogger(org.slf4j.LoggerFactory.getLogger(key)); } }
通过这样的适配,可以使日志组件灵活的应用于dubbo,而且可以灵活的添加新的日志组件应用到dubbo框架中,比如现在比较流行的logback(log4j的升级版本),我们就可以新添加一个Logback的Adapter适配器,然后实现LoggerAdapter的接口,通过logback实现具体的方法定义,然后在Factory中在使用的时候直接new LogBackAdapter就可以使用了。
以上就是dubbo框架目前看到的设计模式,继续学习中.......................
相关推荐
dobbo源码dubbo-dubbo-2.7.3.rardobbo源码dubbo-dubbo-2.7.3.rardobbo源码dubbo-dubbo-2.7.3.rardobbo源码dubbo-dubbo-2.7.3.rardobbo源码dubbo-dubbo-2.7.3.rardobbo源码dubbo-dubbo-2.7.3.rardobbo源码dubbo-dubbo...
dubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo...
本篇将详细讲解基于dubbo-demo-consumer、dubbo-demo-provider和dubbo-simple-monitor的实例服务,带你深入理解Dubbo的核心概念和操作流程。 首先,我们来看`dubbo-demo-consumer`,它是Dubbo服务的消费者。消费者...
其中,`dubbo-monitor-simple`是Dubbo官方提供的一个简单的监控实现,用于展示服务的调用统计信息。本文将详细介绍`dubbo-monitor-simple-2.5.8`版本的相关知识点。 一、Dubbo监控概述 Dubbo的监控体系主要包括...
jmeter的dubbo插件,jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar,适用于JMeter5.4.1版本,将解压后的文件jmeter-plugins-dubbo-2.7.8-jar-with-dependencies放在Jmeter安装目录下的\lib\ext文件夹中,...
dubbo-admin-2.5.4提供支持JDK1.7及JDK1.8的War包 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看...
其中,`dubbo-admin`是Dubbo的核心组件之一,它提供了一个可视化的管理控制台,帮助开发者对服务进行管理和监控。本文将详细解析`dubbo-admin-2.5.4.war`这个版本的后台管理工具,探讨其主要特性和使用方法。 首先...
本文将深入探讨“jmeter-plugins-dubbo-2.7.1-jar-with-dependencies”这一系统压测工具包,它专门针对基于Java的Dubbo服务进行性能测试。了解并熟练掌握这一工具,能帮助我们更好地优化服务性能,提升系统的稳定性...
2. **启动器(Starter)**:理解 `com.alibaba.boot:dubbo-spring-boot-starter` 这个依赖的作用,它是 Dubbo 对 Spring Boot 的适配器,负责自动配置和服务发现。 3. **服务提供者(Provider)**:创建服务提供者...
dubbo-admin安装要点: 1.清空tomcat/webapps/ROOT目录 2.将包解压到tomcat/webapps/ROOT下 3.修改tomcat/webapps/ROOT/WEB-INF/dubbo.properties 文件 dubbo.registry.address dubbo接口服务注册地址: 单机...
- 启动监控服务:部署`dubbo-monitor-simple`应用,提供监控接口和服务。 - 服务提供者注册:服务提供者启动时会向监控中心注册自身信息,包括服务名、版本、地址等。 - 服务消费者调用:服务消费者在调用服务时,...
dubbo官方自带了dubbo-admin及dubbo-simple/dubbo-monitor-simple二个子项目用于服务治理及服务监控。 dubbo-monitor-simple是Alibaba的开源项目,用于监控在dubbo框架下接口暴露,注册情况,也可以看接口的调用...
本文将深入探讨"jmeter-plugins-dubbo-2.7.1-jar-with-dependencies (1)"这个压缩包中的关键知识点。 1. **JMeter Plugins for Dubbo** JMeter Plugins for Dubbo 是一个扩展了JMeter功能的插件,专门用于测试基于...
Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,而`dubbo-admin-2.5.4`则是Dubbo框架中的一个重要组件,它是一个用于监控和服务管理的Web应用。这个war包的提供,使得开发者和运维人员能够更便捷地管理和...
dubbo 最新dubbo-admin-2.8.4.war 菜单报错已修改。
该包为dubbo-monitor,使用方法请参见博文 《Dubbo进阶(五)—— dubbo-monitor-simple使用》 https://blog.csdn.net/sunhuaqiang1/article/details/80141478
- **服务治理**:Dubbo-Admin允许用户查看所有注册的服务,进行服务的启停、上下线操作,同时可以查看服务的元数据信息,如接口、方法、版本等。 - **配置中心**:它提供了配置管理功能,可以动态修改服务的配置...