非同步解耦日誌模組實現思路

2021-07-11 14:56:28 字數 1429 閱讀 4627

日誌使我們系統中必不可少的元素,他的特點是比較多。為了不讓日誌影響我們的正常的業務響應速度,採用了如下設計。

1 採用日誌池概念,當業務系統產生一條日誌時候,我們直接丟在日誌池裡面,單獨開乙個執行緒把日誌池中快取的日誌寫入資料庫。

2 業務系統解耦,一般的操作我們都想記錄使用者的

ip所以我們可以新建***,當使用者請求過來時候可以快取乙個

log物件記錄請求的

ip和使用者名稱,當請求結束時候,清空快取。業務系統丟日誌進來後,先根據執行緒

id查詢當前執行緒中快取的

log。取其中的使用者

ip和名字

核心**

a ***實現

public class defaultexceptioninterceptor implements interceptor 

catch(exception e)

else

//如果是ajax請求

b 日誌池

public class logmanagerimpl implements logmanager 

else

int size = freelist.size();

if(size != 0)

@override

public void debug(string detail)

@override

public void info(string detail)

@override

public void warn(string detail)

@override

public void error(string detail)

@override

public void fatal(string detail)

}

d 日誌呼叫

private static logger logger = logfactory.getlogger();

/*** 使用者登入

* @param userid

* @param password

* @return

*/public static mapdologin(string partnerid,string userid,string password)

//普通使用者登入

else

logger.info("登入系統");

return user;

}

解耦 削峰 非同步的理解

隨著技術的發展分布式系統已經成為標配,分布式系統就存在著各式各樣的程序間通訊。訊息對列實際上就是程序間通訊方式的一種,是生產者消費者模式在分布式場景下的實現。訊息佇列主要由以下作用 解耦,削峰,非同步,其實還有乙個作用是提高接收著效能。我們以乙個快遞員送快遞的栗子來描述下佇列的作用。送快遞送出了煩心...

工廠模式實現解耦

1.首先建立乙個業務類service,在service中有乙個屬性dao,daoimpl是實現了dao介面的類 public class serviceimpl public inte ce dao 2.在建立乙個測試類 public class testmethod 3.我們發現這樣雖然完成業務但...

列舉 反射 解耦業務多流程,實現模組化

1.列舉 列舉是乙個被命名的整型常數的集合,用於宣告一組帶識別符號的常數.宣告列舉 author yangyang version 1.0 date 2020 9 30 9 11 describe 支付列舉 data tostring public enum payserviceenum retur...