DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)
Dubbo過濾器概述
Dubbo中的過濾器和Web應(yīng)用中的過濾器的概念是一樣的,提供了在服務(wù)調(diào)用前后插入自定義邏輯的途徑。過濾器是整個Dubbo框架中非常重要的組成部分,Dubbo中很多功能都是基于過濾器擴(kuò)展而來的。過濾器提供了服務(wù)提供者和消費(fèi)者調(diào)用過程的攔截,即每次都執(zhí)行RPC調(diào)用的時候,對應(yīng)的過濾器都會生效。雖然過濾器的功能強(qiáng)大,但由于每次調(diào)用時都會執(zhí)行,因此在使用的時候需要注意它對性能的影響。
過濾器的使用
- 一種方式是使用@Active注解默認(rèn)啟用;
- 一種方式是在配置文件中配置;
<!-- 消費(fèi)方調(diào)用過程攔截 --> <dubbo:reference filter="xxx, yyy" /> <!-- 消費(fèi)方調(diào)用過程默認(rèn)攔截器,將攔截所有reference --> <dubbo:consumer filter="xxx, yyy" /> <!-- 服務(wù)提供方調(diào)用過程攔截 --> <dubbo:service filter="xxx, yyy" /> <!-- 服務(wù)提供方調(diào)用過程默認(rèn)攔截器,將攔截所有service --> <dubbo:provider filter="xxx, yyy" />
下面看下DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?/h2>
①自定義一個過濾器 DubboLoggerFilter.java
import org.apache.dubbo.rpc.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
/**
* @Author: JCccc
* @Description: dubbo請求和響應(yīng)攔截(記錄請求參數(shù)和響應(yīng)結(jié)果和時長)
* @Date: Create in 19:03 2021/1/26
*/
public class DubboLoggerFilter implements Filter {
protected Logger logger = LoggerFactory.getLogger(getClass());
/**
* rpc日志最長字符串
*/
private final static Integer MAX_LOG_LENGTH=5000;
/**
* rpc日志超過長度截取長度
*/
private final static Integer REMAINING_LOG_LENGTH=1000;
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String methodName = invocation.getMethodName();
Object[] arguments = invocation.getArguments();
String className = invoker.getInterface().getName();
String callMethod = className + "." + methodName;
String argsJson = JSON.toJSONString(arguments);
logger.info("rpc接口callMethod:{}>>入?yún)?{}", callMethod, argsJson);
long start = System.currentTimeMillis();
AsyncRpcResult result = (AsyncRpcResult)invoker.invoke(invocation);
if(result.hasException()){
logger.info("rpc接口callMethod:{},接口耗時:{},異常:{},", callMethod, System.currentTimeMillis() - start,result.getException().getMessage());
} else {
Object resultString = JSON.toJSON(result.getAppResponse().getValue());
if(resultString!=null&&resultString.toString().length()>MAX_LOG_LENGTH){
resultString=resultString.toString().substring(0,REMAINING_LOG_LENGTH)+"...";
}
logger.info("rpc接口callMethod:{},出參:{},接口耗時:{}", callMethod,resultString , System.currentTimeMillis() - start);
}
return result;
}
}
② 加上配置

到此這篇關(guān)于DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信息的文章就介紹到這了,更多相關(guān)DUBBO 日志過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot啟動的注意事項之不同包下有同樣名字的class類問題
這篇文章主要介紹了springboot啟動的注意事項之不同包下有同樣名字的class類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
IDEA報錯"Cannot?resolve?symbol"問題的解決辦法
早上來了,打開idea發(fā)現(xiàn)注解等都變紅報錯can’t resolvesymbol,由于這個錯之前也報過,所以記錄一下,這篇文章主要給大家介紹了關(guān)于IDEA報錯"Cannot?resolve?symbol"問題的解決辦法,需要的朋友可以參考下2023-11-11

