如何給框架新增API介面日誌

2022-03-13 16:22:34 字數 1799 閱讀 4773

前言

用的公司的框架,是mvc框架,看了下裡面的日誌基類,是操作日誌,對增刪改進行記錄,

誇張的是一張業務的資料表 需要一張專門的日誌表進行記錄,

就是說你寫個更新,新增的方法都必須寫一遍操作日誌,**看了,不多,6行。

不懂為什麼要這樣做,api 簡潔萬歲!~  於是果斷在生命週期中插入介面日誌。

思路1   一次插入

2、然後正常往下走呼叫介面的方法,

3、等待介面中的方法執行完,帶著返回值回到生命週期的後半部分,在這裡採集介面的呼叫結果,返回狀態碼,資料等資訊。

4、寫入日誌庫,ok

思路2   一次插入,一次更新

2、直接插入日誌,並記錄插入的log_id

2、然後正常往下走呼叫介面,

3、等待介面中的方法執行完,帶著返回值回到生命週期的後半部分,在這裡採集介面的返回資訊,返回狀態碼,返回資料、響應時間、耗時等資訊。

4、根據log_id更新日誌,ok

action

一頓研究,發現這框架竟然跟主流框架有點合不來,生命週期中 先new 訪問的類,然後執行該類的某個方法,然後沒了~ waht fk

進去一看,原來介面呼叫過程結束後 是 直接在當前執行的函式中 就echo 然後exit,不是我所熟悉的 先 return  然後在生命週期中echo並exit。

好吧,男人有苦從不說,我自清風向明月。

因為生命週期的不完整,以及程式執行過程中隨時可能exit, 故決定 分兩次記錄日誌,一次插入,一次修改,並封裝乙個統一返回資料的函式,確保每個介面最終都會呼叫

在生命週期的前半部分,進入界面前,找乙個空地,蹭一蹭,然後採集相關資訊(包括:介面名稱,url,引數,方法,客戶端ip,訪問時間,甚至類和方法等資訊)

直接插入api_log表,返回 log_id  存到靜態變數中,

下面正常呼叫介面的函式,但是在函式的最後,不論成功或失敗,我們都會格式化一下返回的資料結構,

這裡我們可以利用一下,在這裡採集介面的返回時資料,並根據log_id進行更新操作。

僅提供插入日誌的**進行參考,畢竟每個框架的宣告週期都有區別

/*

* * 新增日誌

* user: lizheng [email protected]

* date: 2019/3/20

*/public

static

function

log()

/*** 介面json 標準輸出,並更新日誌

* @param $result

* user: lizheng [email protected]

* date: 2019/3/20

*/public

static

function json_output($result

)

else

$log_data['end_time'] = time

();

$log_data['life'] = intval(microtime(true) * 1000) - self::$log_start

; self::$_module_log -> update_by_id(self::$log_id, $log_data

);

echo json_encode($result

);

exit

; }

如何給filter新增介面

給乙個filter新增介面,步驟如下 1 建立乙個宣告介面的標頭檔案 inte ce.h 內容包括指定介面的guid 使用guidgen.exe 以及介面函式的宣告。記得加 initguid.h 的include,不然使用時會出現 無法解析的外部符號 iid 錯誤 2 在cfilter類的標頭檔案f...

api介面加密 如何解決API介面開發安全性呢?

如今各種api介面層出不窮,乙個api的好與不好有很多方面可以考量,其中 安全性 是乙個api介面最基本也是最重要的乙個特點。尤其是對於充值繳費類的api介面來說,如話費充值api介面 流量充值api介面 遊戲q幣充值 水電煤繳費介面等,安全與否直接影響到個人或企業的財產,所以做好的api介面安全性...

如何給UITextView 新增連線

要想給uitextview 新增連線 我們要使用到 nsmutableattributedstring 給 uitextview的 attributedtext 新增個連線 這是 長按會進入到uitextview的 delegate中去 我們只需要在delegate中實現連線就好了 在這裡 如果長按...