dubbo解析 詳解日誌適配原理

2021-10-07 12:55:08 字數 2671 閱讀 7795

本文基於dubbo 2.7.5版本**

dubbo自身在執行的過程中也要列印日誌,列印日誌的框架有很多,那麼dubbo是通過哪個框架列印日誌的?本文研究一下dubbo的日誌適配原理。

先說一下如何使用指定的日誌框架,可以使用如下配置:

我們也可以不指定,dubbo預設是log4j。另外,配置檔案的設定值會覆蓋啟動命令的值。

dubbo提供了自己的日誌列印介面,如下:

package org.apache.dubbo.common.logger;

public

inte***ce

logger

logger提供了不同日誌列印級別的方法,列印日誌前首先獲得logger物件:

logger logger = logge***ctory.

getlogger

(getclass()

);//得到logger物件後,就可以列印日誌了,比如列印info級別的日誌:

logger.

info

("這是乙個例子"

);

logge***ctory的**如下:

public

class

logge***ctory

catch

(throwable ignored)}}

}private

logge***ctory()

public

static

void

setloggeradapter

(string loggeradapter)

}public

static

void

setloggeradapter

(loggeradapter loggeradapter)}}

//獲得logger物件,如果從loggers中找不到,那麼訪問日誌介面卡獲得logger物件,並使用failsafelogger封裝

//failsafelogger的作用是:當日誌列印失敗後,它不會將失敗資訊丟擲,預設列印成功。

public

static logger getlogger

(class<

?> key)

public

static logger getlogger

(string key)

public

static level getlevel()

//設定日誌級別

public

static

void

setlevel

(level level)

//可以獲得當前日誌框架正在列印的檔案物件

public

static file getfile()

}

從上面的**可以看出,dubbo最終返回的logger物件是failsafelogger,該類其中乙個方法如下,其他的方法都是類似的,也就是當列印失敗時,不會丟擲異常。

public

void

trace

(throwable e)

catch

(throwable t)

}

logge***ctory.getlogger()返回logger物件是通過呼叫日誌介面卡類獲得的,下面我們看一下介面卡類,介面卡類有多個實現:

每個介面卡實現都是類似的,這裡以slf4jloggeradapter為例介紹介面卡。

public

class

slf4jloggeradapter

implements

loggeradapter

@override

public logger getlogger

(class<

?> key)

@override

public level getlevel()

@override

public

void

setlevel

(level level)

@override

public file getfile()

@override

public

void

setfile

(file file)

}

當呼叫logge***ctory.getlogger時,最終會呼叫到介面卡的getlogger方法,從上面**可以看出,dubbo使用slf4jlogger對日誌框架slf4j的logger物件做了一層封裝,slf4jlogger非常簡單,其將呼叫委託給了slf4j的logger物件,如果有興趣可以看一下,本文不再介紹。

從上面的介紹可以看到,日誌適配功能裡面涉及到了多個類,這裡做一下梳理。

當呼叫logge***ctory.getlogger方法時,各個類的呼叫關係如下:

通過logge***ctory.getlogger得到的logger物件是failsafelogger,dubbo便使用該物件列印日誌。

Dubbo的原理解析

dubbo是什麼?dubbo是alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合 或者最大限度地鬆耦合 從服務模型的角度來看,dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方 ...

dubbo原理之標籤解析

前言 dubbo的標籤解析作為dubbo的入口,結合spring容器的一小小部分的流程,讓大家了解以下dubbo的服務提供者在將服務暴露之前,經歷了哪些過程。標籤解析主要是spring的原始碼部分,spring原始碼加註解部分我也上傳github了 5.0.x分支。下邊是偽 想除錯的也可以按照下面的...

dubbo原始碼解析 簡單原理

dubbo原始碼解析 簡單原理 與spring融合 dubbo是乙個分布式服務框架,致力於提供高效能和透明化的rpc遠端服務呼叫方案,以及soa服務治理方案 面向服務的體系架構 soa service oriented architecture 各服務是部署在不同的伺服器上,那服務間的呼叫就是要通過...