`
liuzhiyi7288
  • 浏览: 32014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dubbo源码学习-日志服务适配器模式

    博客分类:
  • RPC
 
阅读更多

今天读了一下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.rar

    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-2.7.3.rar

    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-demo-consumer、dubbo-demo-provider和dubbo-simple-monitor的实例服务,带你深入理解Dubbo的核心概念和操作流程。 首先,我们来看`dubbo-demo-consumer`,它是Dubbo服务的消费者。消费者...

    dubbo-monitor-simple-2.5.8-assembly.tar.gz

    其中,`dubbo-monitor-simple`是Dubbo官方提供的一个简单的监控实现,用于展示服务的调用统计信息。本文将详细介绍`dubbo-monitor-simple-2.5.8`版本的相关知识点。 一、Dubbo监控概述 Dubbo的监控体系主要包括...

    jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar

    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.war

    dubbo-admin-2.5.4提供支持JDK1.7及JDK1.8的War包 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看...

    dubbo-admin-2.5.4.war后台管理

    其中,`dubbo-admin`是Dubbo的核心组件之一,它提供了一个可视化的管理控制台,帮助开发者对服务进行管理和监控。本文将详细解析`dubbo-admin-2.5.4.war`这个版本的后台管理工具,探讨其主要特性和使用方法。 首先...

    jmeter-plugins-dubbo-2.7.1-jar-with-dependencies

    本文将深入探讨“jmeter-plugins-dubbo-2.7.1-jar-with-dependencies”这一系统压测工具包,它专门针对基于Java的Dubbo服务进行性能测试。了解并熟练掌握这一工具,能帮助我们更好地优化服务性能,提升系统的稳定性...

    springboot2.0.x+dubbo-spring-boot-starter

    2. **启动器(Starter)**:理解 `com.alibaba.boot:dubbo-spring-boot-starter` 这个依赖的作用,它是 Dubbo 对 Spring Boot 的适配器,负责自动配置和服务发现。 3. **服务提供者(Provider)**:创建服务提供者...

    dubbo-admin-2.5.4及dubbo-monitor-2.5.3 安装及配置

    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-monitor-simple`应用,提供监控接口和服务。 - 服务提供者注册:服务提供者启动时会向监控中心注册自身信息,包括服务名、版本、地址等。 - 服务消费者调用:服务消费者在调用服务时,...

    dubbo-monitor-simple-2.6.1.tgz

    dubbo官方自带了dubbo-admin及dubbo-simple/dubbo-monitor-simple二个子项目用于服务治理及服务监控。 dubbo-monitor-simple是Alibaba的开源项目,用于监控在dubbo框架下接口暴露,注册情况,也可以看接口的调用...

    jmeter-plugins-dubbo-2.7.1-jar-with-dependencies (1)

    本文将深入探讨"jmeter-plugins-dubbo-2.7.1-jar-with-dependencies (1)"这个压缩包中的关键知识点。 1. **JMeter Plugins for Dubbo** JMeter Plugins for Dubbo 是一个扩展了JMeter功能的插件,专门用于测试基于...

    dubbo-admin-2.5.4

    Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,而`dubbo-admin-2.5.4`则是Dubbo框架中的一个重要组件,它是一个用于监控和服务管理的Web应用。这个war包的提供,使得开发者和运维人员能够更便捷地管理和...

    dubbo-admin-2.8.4.war

    dubbo 最新dubbo-admin-2.8.4.war 菜单报错已修改。

    dubbo监控中心dubbo-monitor-simple

    该包为dubbo-monitor,使用方法请参见博文 《Dubbo进阶(五)—— dubbo-monitor-simple使用》 https://blog.csdn.net/sunhuaqiang1/article/details/80141478

    incubator-dubbo-ops-master.rar

    - **服务治理**:Dubbo-Admin允许用户查看所有注册的服务,进行服务的启停、上下线操作,同时可以查看服务的元数据信息,如接口、方法、版本等。 - **配置中心**:它提供了配置管理功能,可以动态修改服务的配置...

Global site tag (gtag.js) - Google Analytics