記錄日誌處理的一種方式

2021-08-19 13:43:51 字數 4676 閱讀 9398

itoo-tool中配置:

首先在itoo-tool中定義的結構如下:

exception包中itooexception為itoo異常,繼承runtimeexception,**如下:
public classitooexceptionextendsruntimeexceptionimplementsserializablepublicitooexception(integer code, string message)publicitooexception() 

}

exception包中的handler包為封裝web層的異常處理類,其**如下:
public classitooexceptionhandlerimplementsserializable 

}

enums包
enums包中itooresultenum列舉類定義通用錯誤碼,以及錯誤描述,被itooexception引用,其**如下:
@getter

public enumitooresultenum

}

aspect包
aspect包中的itooabstractaspect為切面類,可從各個服務獲取異常切點,方法引數切點,以及獲取子服務中配置檔案的引數,其作用是,檢測攔截到的異常是否是itooexception或者itooexception的子類,如果不是則轉為itooexception(避免產生classnotfound覆蓋真正的異常)其**如下:
//

定義切面

@aspect

@slf4j

public abstract classitooabstractaspectimplementsserializable

stringbuilder str = getmethodsinfo(joinpoint);if(collectionutils.arraytolist(joinpoint.getargs()).isempty())else

}system.out

.println(str.tostring());

}/**

* 方法正常結束之後執行

**@paramretrunvalue

*/@afterreturning(value ="methodspointcut()", returning ="retrunvalue")public voidafterreturning(joinpoint joinpoint, object retrunvalue)

stringbuilder str = getmethodsinfo(joinpoint);

返回值為:"

+ retrunvalue);

system.out

.println(str);

}privateboolean getaopstatus(string aopname)if(true!= configmap.get(aopname))return true;

}privatestringbuilder getmethodsinfo(joinpoint joinpoint)

/***

方法執行過程中發生異常時執行該方法

**@parame

*/@afterthrowing(value ="exceptionpointcut()", throwing ="e")public voidafterthrowing(throwable e)if(einstanceofitooexception)catch(throwable throwable)

}else

}/**

* 無論是否正確執行目標方法,都會執行該方法,常用與資源**

*///    @after(value = "pointcut()")

//    public void after()

/*** 於before增強處理和afterreturing增強,around增強處理可以決定目標方法在什麼時候執行,如何執行,甚至可以完全阻止目標方法的執行

**@param proceedingjoinpoint

*/@around(value ="methodspointcut()")publicobject around(proceedingjoinpoint proceedingjoinpoint)throwsthrowable

stringbuilder str = getmethodsinfo(proceedingjoinpoint);longstarttime = system.currenttimemillis();

//執行方法

object returnval = proceedingjoinpoint.proceed();

//計算耗時

longelapsedtime = system.currenttimemillis() - starttime;

耗時"

+ elapsedtime +"

毫秒");

system.out

.println(str);returnreturnval;}}

各子服務配置:

api配置:
首先在api中新建兩個包,enums包中定義自定義異常的列舉類,開發人家可在此建立自己的列舉類,被自定義異常引用(下圖是我自定義的列舉類):

exception包中為開發人員自己定義的異常,如下圖為我自定義的異常:

service層配置:
注意:配置後façade層可不用書寫try-catch
在service中,建立aspect包,並建立自己服務的配置,開發人員可通過修改預設配合達到自己預期的效果,效果如下:

方法引數切點:預設切入serviceimpl,可更改

異常切點:預設切入serviceimpl,可捕獲開發人員throw出的異常系統產生的異常

getconfigmap:用於讀取使用者的配置,可配置項如下,用於配置方法方法引數切點切入後想要看到的資訊

**書寫

開發人員在service中的實現中,直接拋出自定義的異常(對於開發人員沒有丟擲的異常異常也會進行攔截)

web層處理:
注意:配置後web層可不用書寫try-catch

在web層建立handler包,每個子服務定義乙個異常處理handler即可,該類繼承tool中的itooexceptionhandler類,可根據使用者自定義異常的不同做不同的處理,最後統一返回resultvoutil物件即可。

web層開發人員**如下(正常書寫即可),如果發生異常會被handler統一攔截

attention的一種實現方式記錄

思想是當前資訊ht與前文多個資訊hs進行比對計算,得到對各個前文資訊hs應該有多少關注度,即at 利用at加權相應的hs,並累加所有加權後的前文資訊,得到綜合前文資訊ct,將其與當前資訊ht進行拼接組合進行 上述流程計算方式如下 這裡的注意力其實可以認為指的是at,因此需要關注at如何計算 上述公式...

記錄一種寬頻故障

網路配置 寬頻路由 2m 寬頻路由器,電信企業賬戶 局口ip 閘道器 192.168.0.1 開通網域名稱 功能 通過寬頻路由器引導其它機器上網,ip 192.168.0.2 254 24 測試機器 ip 192.168.0.187 24,dns 192.168.0.1 和 61.134.1.4 當...

一種新的布局方式

通過王老師的講解,讓我認識到了自己的不足,也學到了一種新的布局方式 主要是宋老師 恐嚇 我們,說如果我們去面試,面試官如果要我們使用這種方式,我們怎麼辦,怎麼解決,我才想深入了解下的 王老師提出了兩個問題,她自己也為我們解答了,現在需要我們自己去總結,化為自己的知識。第乙個問題 為什麼會兩個內聯標籤...