本文基於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 各服務是部署在不同的伺服器上,那服務間的呼叫就是要通過...